diff --git a/.changeset/chatty-walls-juggle.md b/.changeset/chatty-walls-juggle.md new file mode 100644 index 000000000..e92507551 --- /dev/null +++ b/.changeset/chatty-walls-juggle.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-regexp": minor +--- + +Add `regexp/grapheme-string-literal` rule diff --git a/README.md b/README.md index a780a509e..e25b2317e 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,7 @@ The `plugin:regexp/all` config enables all rules. It's meant for testing, not fo | Name                             | Description | 💼 | ⚠️ | 🔧 | 💡 | | :------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :- | :- | :- | :- | +| [grapheme-string-literal](https://ota-meshi.github.io/eslint-plugin-regexp/rules/grapheme-string-literal.html) | enforce single grapheme in string literal | | | | | | [hexadecimal-escape](https://ota-meshi.github.io/eslint-plugin-regexp/rules/hexadecimal-escape.html) | enforce consistent usage of hexadecimal escape | | | 🔧 | | | [letter-case](https://ota-meshi.github.io/eslint-plugin-regexp/rules/letter-case.html) | enforce into your favorite case | | | 🔧 | | | [match-any](https://ota-meshi.github.io/eslint-plugin-regexp/rules/match-any.html) | enforce match any character style | ✅ | | 🔧 | | diff --git a/docs/rules/grapheme-string-literal.md b/docs/rules/grapheme-string-literal.md new file mode 100644 index 000000000..a70e53ee2 --- /dev/null +++ b/docs/rules/grapheme-string-literal.md @@ -0,0 +1,55 @@ +--- +pageClass: "rule-details" +sidebarDepth: 0 +title: "regexp/grapheme-string-literal" +description: "enforce single grapheme in string literal" +--- +# regexp/grapheme-string-literal + + + +> enforce single grapheme in string literal + +## :book: Rule Details + +This rule is aimed to clarify the difference between using a string literal and normal disjunctions by not using string literals for purposes other than expressing a single grapheme. + + + +```js +/* eslint regexp/grapheme-string-literal: "error" */ + +/* ✓ GOOD */ +var foo = /[\p{RGI_Emoji}--\q{🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯}]/v +var foo = /[\q{a|b|c}]/v + +/* ✗ BAD */ +var foo = /[\q{abc|def}]/v +``` + + + +This rule does not report empty string literals. Use [regexp/no-empty-string-literal] and [regexp/no-empty-alternative] if you want to check them. + +## :wrench: Options + +Nothing. + +## :couple: Related rules + +- [regexp/no-empty-string-literal] +- [regexp/no-empty-alternative] +- [regexp/no-useless-string-literal] + +[regexp/no-empty-string-literal]: ./no-empty-string-literal.md +[regexp/no-empty-alternative]: ./no-empty-alternative.md +[regexp/no-useless-string-literal]: ./no-useless-string-literal.md + +## :rocket: Version + +:exclamation: ***This rule has not been released yet.*** + +## :mag: Implementation + +- [Rule source](https://github.com/ota-meshi/eslint-plugin-regexp/blob/master/lib/rules/grapheme-string-literal.ts) +- [Test source](https://github.com/ota-meshi/eslint-plugin-regexp/blob/master/tests/lib/rules/grapheme-string-literal.ts) diff --git a/docs/rules/index.md b/docs/rules/index.md index 9e3954aad..4f2e4a255 100644 --- a/docs/rules/index.md +++ b/docs/rules/index.md @@ -86,6 +86,7 @@ sidebarDepth: 0 | Name                             | Description | 💼 | ⚠️ | 🔧 | 💡 | | :---------------------------------------------------------------------- | :--------------------------------------------------------------------- | :- | :- | :- | :- | +| [grapheme-string-literal](grapheme-string-literal.md) | enforce single grapheme in string literal | | | | | | [hexadecimal-escape](hexadecimal-escape.md) | enforce consistent usage of hexadecimal escape | | | 🔧 | | | [letter-case](letter-case.md) | enforce into your favorite case | | | 🔧 | | | [match-any](match-any.md) | enforce match any character style | ✅ | | 🔧 | | diff --git a/lib/rules/grapheme-string-literal.ts b/lib/rules/grapheme-string-literal.ts new file mode 100644 index 000000000..02a7226a4 --- /dev/null +++ b/lib/rules/grapheme-string-literal.ts @@ -0,0 +1,65 @@ +import type { RegExpVisitor } from "@eslint-community/regexpp/visitor" +import type { RegExpContext } from "../utils" +import { createRule, defineRegexpVisitor } from "../utils" +import type { StringAlternative } from "@eslint-community/regexpp/ast" + +const segmenter = new Intl.Segmenter() + +export default createRule("grapheme-string-literal", { + meta: { + docs: { + description: "enforce single grapheme in string literal", + category: "Stylistic Issues", + recommended: false, + }, + schema: [], + messages: { + onlySingleCharacters: + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `{{alternatives}}`) for strings instead.", + }, + type: "suggestion", + }, + create(context) { + function createVisitor( + regexpContext: RegExpContext, + ): RegExpVisitor.Handlers { + const { node, getRegexpLocation } = regexpContext + + function isMultipleGraphemes(saNode: StringAlternative) { + if (saNode.elements.length <= 1) return false + const string = String.fromCodePoint( + ...saNode.elements.map((element) => element.value), + ) + + const segments = [...segmenter.segment(string)] + return segments.length > 1 + } + + function buildAlternativeExample(saNode: StringAlternative) { + const alternativeRaws = saNode.parent.alternatives + .filter(isMultipleGraphemes) + .map((alt) => alt.raw) + return `(?:${alternativeRaws.join("|")}|[...])` + } + + return { + onStringAlternativeEnter(saNode) { + if (!isMultipleGraphemes(saNode)) return + + context.report({ + node, + loc: getRegexpLocation(saNode), + messageId: "onlySingleCharacters", + data: { + alternatives: buildAlternativeExample(saNode), + }, + }) + }, + } + } + + return defineRegexpVisitor(context, { + createVisitor, + }) + }, +}) diff --git a/lib/utils/rules.ts b/lib/utils/rules.ts index 220ba9353..47cae4da6 100644 --- a/lib/utils/rules.ts +++ b/lib/utils/rules.ts @@ -1,6 +1,7 @@ import type { RuleModule } from "../types" import confusingQuantifier from "../rules/confusing-quantifier" import controlCharacterEscape from "../rules/control-character-escape" +import graphemeStringLiteral from "../rules/grapheme-string-literal" import hexadecimalEscape from "../rules/hexadecimal-escape" import letterCase from "../rules/letter-case" import matchAny from "../rules/match-any" @@ -88,6 +89,7 @@ import useIgnoreCase from "../rules/use-ignore-case" export const rules = [ confusingQuantifier, controlCharacterEscape, + graphemeStringLiteral, hexadecimalEscape, letterCase, matchAny, diff --git a/tests/lib/rules/grapheme-string-literal.ts b/tests/lib/rules/grapheme-string-literal.ts new file mode 100644 index 000000000..c4fcde0a2 --- /dev/null +++ b/tests/lib/rules/grapheme-string-literal.ts @@ -0,0 +1,221 @@ +import { RuleTester } from "eslint" +import rule from "../../../lib/rules/grapheme-string-literal" + +const tester = new RuleTester({ + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + }, +}) + +tester.run("grapheme-string-literal", rule as any, { + valid: [ + // Basic_Emoji + String.raw`/[\q{©️|®️|‼️|⁉️|™️|ℹ️|↔️|↕️|↖️|↗️|↘️|↙️|↩️|↪️|⌨️|⏏️|⏭️|⏮️|⏯️|⏱️}]/v`, + String.raw`/[\q{⏲️|⏸️|⏹️|⏺️|Ⓜ️|▪️|▫️|▶️|◀️|◻️|◼️|☀️|☁️|☂️|☃️|☄️|☎️|☑️|☘️|☝️}]/v`, + String.raw`/[\q{☠️|☢️|☣️|☦️|☪️|☮️|☯️|☸️|☹️|☺️|♀️|♂️|♟️|♠️|♣️|♥️|♦️|♨️|♻️|♾️}]/v`, + String.raw`/[\q{⚒️|⚔️|⚕️|⚖️|⚗️|⚙️|⚛️|⚜️|⚠️|⚧️|⚰️|⚱️|⛈️|⛏️|⛑️|⛓️|⛩️|⛰️|⛱️|⛴️}]/v`, + String.raw`/[\q{⛷️|⛸️|⛹️|✂️|✈️|✉️|✌️|✍️|✏️|✒️|✔️|✖️|✝️|✡️|✳️|✴️|❄️|❇️|❣️|❤️}]/v`, + String.raw`/[\q{➡️|⤴️|⤵️|⬅️|⬆️|⬇️|〰️|〽️|㊗️|㊙️|🅰️|🅱️|🅾️|🅿️|🈂️|🈷️|🌡️|🌤️|🌥️|🌦️}]/v`, + String.raw`/[\q{🌧️|🌨️|🌩️|🌪️|🌫️|🌬️|🌶️|🍽️|🎖️|🎗️|🎙️|🎚️|🎛️|🎞️|🎟️|🏋️|🏌️|🏍️|🏎️|🏔️}]/v`, + String.raw`/[\q{🏕️|🏖️|🏗️|🏘️|🏙️|🏚️|🏛️|🏜️|🏝️|🏞️|🏟️|🏳️|🏵️|🏷️|🐿️|👁️|📽️|🕉️|🕊️|🕯️}]/v`, + String.raw`/[\q{🕰️|🕳️|🕴️|🕵️|🕶️|🕷️|🕸️|🕹️|🖇️|🖊️|🖋️|🖌️|🖍️|🖐️|🖥️|🖨️|🖱️|🖲️|🖼️|🗂️}]/v`, + String.raw`/[\q{🗃️|🗄️|🗑️|🗒️|🗓️|🗜️|🗝️|🗞️|🗡️|🗣️|🗨️|🗯️|🗳️|🗺️|🛋️|🛍️|🛎️|🛏️|🛠️|🛡️}]/v`, + String.raw`/[\q{🛢️|🛣️|🛤️|🛥️|🛩️|🛰️|🛳️}]/v`, + // Emoji_Keycap_Sequence + String.raw`/[\q{#️⃣|*️⃣|0️⃣|1️⃣|2️⃣|3️⃣|4️⃣|5️⃣|6️⃣|7️⃣|8️⃣|9️⃣}]/v`, + // RGI_Emoji_Flag_Sequence + String.raw`/[\q{🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩}]/v`, + String.raw`/[\q{🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨}]/v`, + String.raw`/[\q{🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬}]/v`, + String.raw`/[\q{🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷}]/v`, + String.raw`/[\q{🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰}]/v`, + String.raw`/[\q{🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵}]/v`, + String.raw`/[\q{🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺}]/v`, + String.raw`/[\q{🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺}]/v`, + String.raw`/[\q{🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪}]/v`, + String.raw`/[\q{🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧}]/v`, + String.raw`/[\q{🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦}]/v`, + String.raw`/[\q{🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳}]/v`, + String.raw`/[\q{🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼}]/v`, + // RGI_Emoji_Modifier_Sequence + String.raw`/[\q{☝🏻|☝🏼|☝🏽|☝🏾|☝🏿|⛹🏻|⛹🏼|⛹🏽|⛹🏾|⛹🏿|✊🏻|✊🏼|✊🏽|✊🏾|✊🏿|✋🏻|✋🏼|✋🏽|✋🏾|✋🏿}]/v`, + String.raw`/[\q{✌🏻|✌🏼|✌🏽|✌🏾|✌🏿|✍🏻|✍🏼|✍🏽|✍🏾|✍🏿|🎅🏻|🎅🏼|🎅🏽|🎅🏾|🎅🏿|🏂🏻|🏂🏼|🏂🏽|🏂🏾|🏂🏿}]/v`, + String.raw`/[\q{🏃🏻|🏃🏼|🏃🏽|🏃🏾|🏃🏿|🏄🏻|🏄🏼|🏄🏽|🏄🏾|🏄🏿|🏇🏻|🏇🏼|🏇🏽|🏇🏾|🏇🏿|🏊🏻|🏊🏼|🏊🏽|🏊🏾|🏊🏿}]/v`, + String.raw`/[\q{🏋🏻|🏋🏼|🏋🏽|🏋🏾|🏋🏿|🏌🏻|🏌🏼|🏌🏽|🏌🏾|🏌🏿|👂🏻|👂🏼|👂🏽|👂🏾|👂🏿|👃🏻|👃🏼|👃🏽|👃🏾|👃🏿}]/v`, + String.raw`/[\q{👆🏻|👆🏼|👆🏽|👆🏾|👆🏿|👇🏻|👇🏼|👇🏽|👇🏾|👇🏿|👈🏻|👈🏼|👈🏽|👈🏾|👈🏿|👉🏻|👉🏼|👉🏽|👉🏾|👉🏿}]/v`, + String.raw`/[\q{👊🏻|👊🏼|👊🏽|👊🏾|👊🏿|👋🏻|👋🏼|👋🏽|👋🏾|👋🏿|👌🏻|👌🏼|👌🏽|👌🏾|👌🏿|👍🏻|👍🏼|👍🏽|👍🏾|👍🏿}]/v`, + String.raw`/[\q{👎🏻|👎🏼|👎🏽|👎🏾|👎🏿|👏🏻|👏🏼|👏🏽|👏🏾|👏🏿|👐🏻|👐🏼|👐🏽|👐🏾|👐🏿|👦🏻|👦🏼|👦🏽|👦🏾|👦🏿}]/v`, + String.raw`/[\q{👧🏻|👧🏼|👧🏽|👧🏾|👧🏿|👨🏻|👨🏼|👨🏽|👨🏾|👨🏿|👩🏻|👩🏼|👩🏽|👩🏾|👩🏿|👫🏻|👫🏼|👫🏽|👫🏾|👫🏿}]/v`, + String.raw`/[\q{👬🏻|👬🏼|👬🏽|👬🏾|👬🏿|👭🏻|👭🏼|👭🏽|👭🏾|👭🏿|👮🏻|👮🏼|👮🏽|👮🏾|👮🏿|👰🏻|👰🏼|👰🏽|👰🏾|👰🏿}]/v`, + String.raw`/[\q{👱🏻|👱🏼|👱🏽|👱🏾|👱🏿|👲🏻|👲🏼|👲🏽|👲🏾|👲🏿|👳🏻|👳🏼|👳🏽|👳🏾|👳🏿|👴🏻|👴🏼|👴🏽|👴🏾|👴🏿}]/v`, + String.raw`/[\q{👵🏻|👵🏼|👵🏽|👵🏾|👵🏿|👶🏻|👶🏼|👶🏽|👶🏾|👶🏿|👷🏻|👷🏼|👷🏽|👷🏾|👷🏿|👸🏻|👸🏼|👸🏽|👸🏾|👸🏿}]/v`, + String.raw`/[\q{👼🏻|👼🏼|👼🏽|👼🏾|👼🏿|💁🏻|💁🏼|💁🏽|💁🏾|💁🏿|💂🏻|💂🏼|💂🏽|💂🏾|💂🏿|💃🏻|💃🏼|💃🏽|💃🏾|💃🏿}]/v`, + String.raw`/[\q{💅🏻|💅🏼|💅🏽|💅🏾|💅🏿|💆🏻|💆🏼|💆🏽|💆🏾|💆🏿|💇🏻|💇🏼|💇🏽|💇🏾|💇🏿|💏🏻|💏🏼|💏🏽|💏🏾|💏🏿}]/v`, + String.raw`/[\q{💑🏻|💑🏼|💑🏽|💑🏾|💑🏿|💪🏻|💪🏼|💪🏽|💪🏾|💪🏿|🕴🏻|🕴🏼|🕴🏽|🕴🏾|🕴🏿|🕵🏻|🕵🏼|🕵🏽|🕵🏾|🕵🏿}]/v`, + String.raw`/[\q{🕺🏻|🕺🏼|🕺🏽|🕺🏾|🕺🏿|🖐🏻|🖐🏼|🖐🏽|🖐🏾|🖐🏿|🖕🏻|🖕🏼|🖕🏽|🖕🏾|🖕🏿|🖖🏻|🖖🏼|🖖🏽|🖖🏾|🖖🏿}]/v`, + String.raw`/[\q{🙅🏻|🙅🏼|🙅🏽|🙅🏾|🙅🏿|🙆🏻|🙆🏼|🙆🏽|🙆🏾|🙆🏿|🙇🏻|🙇🏼|🙇🏽|🙇🏾|🙇🏿|🙋🏻|🙋🏼|🙋🏽|🙋🏾|🙋🏿}]/v`, + String.raw`/[\q{🙌🏻|🙌🏼|🙌🏽|🙌🏾|🙌🏿|🙍🏻|🙍🏼|🙍🏽|🙍🏾|🙍🏿|🙎🏻|🙎🏼|🙎🏽|🙎🏾|🙎🏿|🙏🏻|🙏🏼|🙏🏽|🙏🏾|🙏🏿}]/v`, + String.raw`/[\q{🚣🏻|🚣🏼|🚣🏽|🚣🏾|🚣🏿|🚴🏻|🚴🏼|🚴🏽|🚴🏾|🚴🏿|🚵🏻|🚵🏼|🚵🏽|🚵🏾|🚵🏿|🚶🏻|🚶🏼|🚶🏽|🚶🏾|🚶🏿}]/v`, + String.raw`/[\q{🛀🏻|🛀🏼|🛀🏽|🛀🏾|🛀🏿|🛌🏻|🛌🏼|🛌🏽|🛌🏾|🛌🏿|🤌🏻|🤌🏼|🤌🏽|🤌🏾|🤌🏿|🤏🏻|🤏🏼|🤏🏽|🤏🏾|🤏🏿}]/v`, + String.raw`/[\q{🤘🏻|🤘🏼|🤘🏽|🤘🏾|🤘🏿|🤙🏻|🤙🏼|🤙🏽|🤙🏾|🤙🏿|🤚🏻|🤚🏼|🤚🏽|🤚🏾|🤚🏿|🤛🏻|🤛🏼|🤛🏽|🤛🏾|🤛🏿}]/v`, + String.raw`/[\q{🤜🏻|🤜🏼|🤜🏽|🤜🏾|🤜🏿|🤝🏻|🤝🏼|🤝🏽|🤝🏾|🤝🏿|🤞🏻|🤞🏼|🤞🏽|🤞🏾|🤞🏿|🤟🏻|🤟🏼|🤟🏽|🤟🏾|🤟🏿}]/v`, + String.raw`/[\q{🤦🏻|🤦🏼|🤦🏽|🤦🏾|🤦🏿|🤰🏻|🤰🏼|🤰🏽|🤰🏾|🤰🏿|🤱🏻|🤱🏼|🤱🏽|🤱🏾|🤱🏿|🤲🏻|🤲🏼|🤲🏽|🤲🏾|🤲🏿}]/v`, + String.raw`/[\q{🤳🏻|🤳🏼|🤳🏽|🤳🏾|🤳🏿|🤴🏻|🤴🏼|🤴🏽|🤴🏾|🤴🏿|🤵🏻|🤵🏼|🤵🏽|🤵🏾|🤵🏿|🤶🏻|🤶🏼|🤶🏽|🤶🏾|🤶🏿}]/v`, + String.raw`/[\q{🤷🏻|🤷🏼|🤷🏽|🤷🏾|🤷🏿|🤸🏻|🤸🏼|🤸🏽|🤸🏾|🤸🏿|🤹🏻|🤹🏼|🤹🏽|🤹🏾|🤹🏿|🤽🏻|🤽🏼|🤽🏽|🤽🏾|🤽🏿}]/v`, + String.raw`/[\q{🤾🏻|🤾🏼|🤾🏽|🤾🏾|🤾🏿|🥷🏻|🥷🏼|🥷🏽|🥷🏾|🥷🏿|🦵🏻|🦵🏼|🦵🏽|🦵🏾|🦵🏿|🦶🏻|🦶🏼|🦶🏽|🦶🏾|🦶🏿}]/v`, + String.raw`/[\q{🦸🏻|🦸🏼|🦸🏽|🦸🏾|🦸🏿|🦹🏻|🦹🏼|🦹🏽|🦹🏾|🦹🏿|🦻🏻|🦻🏼|🦻🏽|🦻🏾|🦻🏿|🧍🏻|🧍🏼|🧍🏽|🧍🏾|🧍🏿}]/v`, + String.raw`/[\q{🧎🏻|🧎🏼|🧎🏽|🧎🏾|🧎🏿|🧏🏻|🧏🏼|🧏🏽|🧏🏾|🧏🏿|🧑🏻|🧑🏼|🧑🏽|🧑🏾|🧑🏿|🧒🏻|🧒🏼|🧒🏽|🧒🏾|🧒🏿}]/v`, + String.raw`/[\q{🧓🏻|🧓🏼|🧓🏽|🧓🏾|🧓🏿|🧔🏻|🧔🏼|🧔🏽|🧔🏾|🧔🏿|🧕🏻|🧕🏼|🧕🏽|🧕🏾|🧕🏿|🧖🏻|🧖🏼|🧖🏽|🧖🏾|🧖🏿}]/v`, + String.raw`/[\q{🧗🏻|🧗🏼|🧗🏽|🧗🏾|🧗🏿|🧘🏻|🧘🏼|🧘🏽|🧘🏾|🧘🏿|🧙🏻|🧙🏼|🧙🏽|🧙🏾|🧙🏿|🧚🏻|🧚🏼|🧚🏽|🧚🏾|🧚🏿}]/v`, + String.raw`/[\q{🧛🏻|🧛🏼|🧛🏽|🧛🏾|🧛🏿|🧜🏻|🧜🏼|🧜🏽|🧜🏾|🧜🏿|🧝🏻|🧝🏼|🧝🏽|🧝🏾|🧝🏿|🫃🏻|🫃🏼|🫃🏽|🫃🏾|🫃🏿}]/v`, + String.raw`/[\q{🫄🏻|🫄🏼|🫄🏽|🫄🏾|🫄🏿|🫅🏻|🫅🏼|🫅🏽|🫅🏾|🫅🏿|🫰🏻|🫰🏼|🫰🏽|🫰🏾|🫰🏿|🫱🏻|🫱🏼|🫱🏽|🫱🏾|🫱🏿}]/v`, + String.raw`/[\q{🫲🏻|🫲🏼|🫲🏽|🫲🏾|🫲🏿|🫳🏻|🫳🏼|🫳🏽|🫳🏾|🫳🏿|🫴🏻|🫴🏼|🫴🏽|🫴🏾|🫴🏿|🫵🏻|🫵🏼|🫵🏽|🫵🏾|🫵🏿}]/v`, + String.raw`/[\q{🫶🏻|🫶🏼|🫶🏽|🫶🏾|🫶🏿|🫷🏻|🫷🏼|🫷🏽|🫷🏾|🫷🏿|🫸🏻|🫸🏼|🫸🏽|🫸🏾|🫸🏿}]/v`, + // RGI_Emoji_Tag_Sequence + String.raw`/[\q{🏴󠁧󠁢󠁥󠁮󠁧󠁿|🏴󠁧󠁢󠁳󠁣󠁴󠁿|🏴󠁧󠁢󠁷󠁬󠁳󠁿}]/v`, + // RGI_Emoji_ZWJ_Sequence + String.raw`/[\q{🐈‍⬛|🐕‍🦺|🐦‍⬛|👨‍🌾|👨‍🍳|👨‍🍼|👨‍🎓|👨‍🎤|👨‍🎨|👨‍🏫|👨‍🏭|👨‍👦|👨‍👧|👨‍💻|👨‍💼|👨‍🔧|👨‍🔬|👨‍🚀|👨‍🚒|👨‍🦯}]/v`, + String.raw`/[\q{👨‍🦰|👨‍🦱|👨‍🦲|👨‍🦳|👨‍🦼|👨‍🦽|👩‍🌾|👩‍🍳|👩‍🍼|👩‍🎓|👩‍🎤|👩‍🎨|👩‍🏫|👩‍🏭|👩‍👦|👩‍👧|👩‍💻|👩‍💼|👩‍🔧|👩‍🔬}]/v`, + String.raw`/[\q{👩‍🚀|👩‍🚒|👩‍🦯|👩‍🦰|👩‍🦱|👩‍🦲|👩‍🦳|👩‍🦼|👩‍🦽|😮‍💨|😵‍💫|🧑‍🌾|🧑‍🍳|🧑‍🍼|🧑‍🎄|🧑‍🎓|🧑‍🎤|🧑‍🎨|🧑‍🏫|🧑‍🏭}]/v`, + String.raw`/[\q{🧑‍💻|🧑‍💼|🧑‍🔧|🧑‍🔬|🧑‍🚀|🧑‍🚒|🧑‍🦯|🧑‍🦰|🧑‍🦱|🧑‍🦲|🧑‍🦳|🧑‍🦼|🧑‍🦽|❤️‍🔥|❤️‍🩹|🏃‍♀️|🏃‍♂️|🏄‍♀️|🏄‍♂️|🏊‍♀️}]/v`, + String.raw`/[\q{🏊‍♂️|🏳️‍🌈|🏴‍☠️|🐻‍❄️|👨‍⚕️|👨‍⚖️|👨‍✈️|👨🏻‍🌾|👨🏻‍🍳|👨🏻‍🍼|👨🏻‍🎓|👨🏻‍🎤|👨🏻‍🎨|👨🏻‍🏫|👨🏻‍🏭|👨🏻‍💻|👨🏻‍💼|👨🏻‍🔧|👨🏻‍🔬|👨🏻‍🚀}]/v`, + String.raw`/[\q{👨🏻‍🚒|👨🏻‍🦯|👨🏻‍🦰|👨🏻‍🦱|👨🏻‍🦲|👨🏻‍🦳|👨🏻‍🦼|👨🏻‍🦽|👨🏼‍🌾|👨🏼‍🍳|👨🏼‍🍼|👨🏼‍🎓|👨🏼‍🎤|👨🏼‍🎨|👨🏼‍🏫|👨🏼‍🏭|👨🏼‍💻|👨🏼‍💼|👨🏼‍🔧|👨🏼‍🔬}]/v`, + String.raw`/[\q{👨🏼‍🚀|👨🏼‍🚒|👨🏼‍🦯|👨🏼‍🦰|👨🏼‍🦱|👨🏼‍🦲|👨🏼‍🦳|👨🏼‍🦼|👨🏼‍🦽|👨🏽‍🌾|👨🏽‍🍳|👨🏽‍🍼|👨🏽‍🎓|👨🏽‍🎤|👨🏽‍🎨|👨🏽‍🏫|👨🏽‍🏭|👨🏽‍💻|👨🏽‍💼|👨🏽‍🔧}]/v`, + String.raw`/[\q{👨🏽‍🔬|👨🏽‍🚀|👨🏽‍🚒|👨🏽‍🦯|👨🏽‍🦰|👨🏽‍🦱|👨🏽‍🦲|👨🏽‍🦳|👨🏽‍🦼|👨🏽‍🦽|👨🏾‍🌾|👨🏾‍🍳|👨🏾‍🍼|👨🏾‍🎓|👨🏾‍🎤|👨🏾‍🎨|👨🏾‍🏫|👨🏾‍🏭|👨🏾‍💻|👨🏾‍💼}]/v`, + String.raw`/[\q{👨🏾‍🔧|👨🏾‍🔬|👨🏾‍🚀|👨🏾‍🚒|👨🏾‍🦯|👨🏾‍🦰|👨🏾‍🦱|👨🏾‍🦲|👨🏾‍🦳|👨🏾‍🦼|👨🏾‍🦽|👨🏿‍🌾|👨🏿‍🍳|👨🏿‍🍼|👨🏿‍🎓|👨🏿‍🎤|👨🏿‍🎨|👨🏿‍🏫|👨🏿‍🏭|👨🏿‍💻}]/v`, + String.raw`/[\q{👨🏿‍💼|👨🏿‍🔧|👨🏿‍🔬|👨🏿‍🚀|👨🏿‍🚒|👨🏿‍🦯|👨🏿‍🦰|👨🏿‍🦱|👨🏿‍🦲|👨🏿‍🦳|👨🏿‍🦼|👨🏿‍🦽|👩‍⚕️|👩‍⚖️|👩‍✈️|👩🏻‍🌾|👩🏻‍🍳|👩🏻‍🍼|👩🏻‍🎓|👩🏻‍🎤}]/v`, + String.raw`/[\q{👩🏻‍🎨|👩🏻‍🏫|👩🏻‍🏭|👩🏻‍💻|👩🏻‍💼|👩🏻‍🔧|👩🏻‍🔬|👩🏻‍🚀|👩🏻‍🚒|👩🏻‍🦯|👩🏻‍🦰|👩🏻‍🦱|👩🏻‍🦲|👩🏻‍🦳|👩🏻‍🦼|👩🏻‍🦽|👩🏼‍🌾|👩🏼‍🍳|👩🏼‍🍼|👩🏼‍🎓}]/v`, + String.raw`/[\q{👩🏼‍🎤|👩🏼‍🎨|👩🏼‍🏫|👩🏼‍🏭|👩🏼‍💻|👩🏼‍💼|👩🏼‍🔧|👩🏼‍🔬|👩🏼‍🚀|👩🏼‍🚒|👩🏼‍🦯|👩🏼‍🦰|👩🏼‍🦱|👩🏼‍🦲|👩🏼‍🦳|👩🏼‍🦼|👩🏼‍🦽|👩🏽‍🌾|👩🏽‍🍳|👩🏽‍🍼}]/v`, + String.raw`/[\q{👩🏽‍🎓|👩🏽‍🎤|👩🏽‍🎨|👩🏽‍🏫|👩🏽‍🏭|👩🏽‍💻|👩🏽‍💼|👩🏽‍🔧|👩🏽‍🔬|👩🏽‍🚀|👩🏽‍🚒|👩🏽‍🦯|👩🏽‍🦰|👩🏽‍🦱|👩🏽‍🦲|👩🏽‍🦳|👩🏽‍🦼|👩🏽‍🦽|👩🏾‍🌾|👩🏾‍🍳}]/v`, + String.raw`/[\q{👩🏾‍🍼|👩🏾‍🎓|👩🏾‍🎤|👩🏾‍🎨|👩🏾‍🏫|👩🏾‍🏭|👩🏾‍💻|👩🏾‍💼|👩🏾‍🔧|👩🏾‍🔬|👩🏾‍🚀|👩🏾‍🚒|👩🏾‍🦯|👩🏾‍🦰|👩🏾‍🦱|👩🏾‍🦲|👩🏾‍🦳|👩🏾‍🦼|👩🏾‍🦽|👩🏿‍🌾}]/v`, + String.raw`/[\q{👩🏿‍🍳|👩🏿‍🍼|👩🏿‍🎓|👩🏿‍🎤|👩🏿‍🎨|👩🏿‍🏫|👩🏿‍🏭|👩🏿‍💻|👩🏿‍💼|👩🏿‍🔧|👩🏿‍🔬|👩🏿‍🚀|👩🏿‍🚒|👩🏿‍🦯|👩🏿‍🦰|👩🏿‍🦱|👩🏿‍🦲|👩🏿‍🦳|👩🏿‍🦼|👩🏿‍🦽}]/v`, + String.raw`/[\q{👮‍♀️|👮‍♂️|👯‍♀️|👯‍♂️|👰‍♀️|👰‍♂️|👱‍♀️|👱‍♂️|👳‍♀️|👳‍♂️|👷‍♀️|👷‍♂️|💁‍♀️|💁‍♂️|💂‍♀️|💂‍♂️|💆‍♀️|💆‍♂️|💇‍♀️|💇‍♂️}]/v`, + String.raw`/[\q{😶‍🌫️|🙅‍♀️|🙅‍♂️|🙆‍♀️|🙆‍♂️|🙇‍♀️|🙇‍♂️|🙋‍♀️|🙋‍♂️|🙍‍♀️|🙍‍♂️|🙎‍♀️|🙎‍♂️|🚣‍♀️|🚣‍♂️|🚴‍♀️|🚴‍♂️|🚵‍♀️|🚵‍♂️|🚶‍♀️}]/v`, + String.raw`/[\q{🚶‍♂️|🤦‍♀️|🤦‍♂️|🤵‍♀️|🤵‍♂️|🤷‍♀️|🤷‍♂️|🤸‍♀️|🤸‍♂️|🤹‍♀️|🤹‍♂️|🤼‍♀️|🤼‍♂️|🤽‍♀️|🤽‍♂️|🤾‍♀️|🤾‍♂️|🦸‍♀️|🦸‍♂️|🦹‍♀️}]/v`, + String.raw`/[\q{🦹‍♂️|🧍‍♀️|🧍‍♂️|🧎‍♀️|🧎‍♂️|🧏‍♀️|🧏‍♂️|🧑‍⚕️|🧑‍⚖️|🧑‍✈️|🧑🏻‍🌾|🧑🏻‍🍳|🧑🏻‍🍼|🧑🏻‍🎄|🧑🏻‍🎓|🧑🏻‍🎤|🧑🏻‍🎨|🧑🏻‍🏫|🧑🏻‍🏭|🧑🏻‍💻}]/v`, + String.raw`/[\q{🧑🏻‍💼|🧑🏻‍🔧|🧑🏻‍🔬|🧑🏻‍🚀|🧑🏻‍🚒|🧑🏻‍🦯|🧑🏻‍🦰|🧑🏻‍🦱|🧑🏻‍🦲|🧑🏻‍🦳|🧑🏻‍🦼|🧑🏻‍🦽|🧑🏼‍🌾|🧑🏼‍🍳|🧑🏼‍🍼|🧑🏼‍🎄|🧑🏼‍🎓|🧑🏼‍🎤|🧑🏼‍🎨|🧑🏼‍🏫}]/v`, + String.raw`/[\q{🧑🏼‍🏭|🧑🏼‍💻|🧑🏼‍💼|🧑🏼‍🔧|🧑🏼‍🔬|🧑🏼‍🚀|🧑🏼‍🚒|🧑🏼‍🦯|🧑🏼‍🦰|🧑🏼‍🦱|🧑🏼‍🦲|🧑🏼‍🦳|🧑🏼‍🦼|🧑🏼‍🦽|🧑🏽‍🌾|🧑🏽‍🍳|🧑🏽‍🍼|🧑🏽‍🎄|🧑🏽‍🎓|🧑🏽‍🎤}]/v`, + String.raw`/[\q{🧑🏽‍🎨|🧑🏽‍🏫|🧑🏽‍🏭|🧑🏽‍💻|🧑🏽‍💼|🧑🏽‍🔧|🧑🏽‍🔬|🧑🏽‍🚀|🧑🏽‍🚒|🧑🏽‍🦯|🧑🏽‍🦰|🧑🏽‍🦱|🧑🏽‍🦲|🧑🏽‍🦳|🧑🏽‍🦼|🧑🏽‍🦽|🧑🏾‍🌾|🧑🏾‍🍳|🧑🏾‍🍼|🧑🏾‍🎄}]/v`, + String.raw`/[\q{🧑🏾‍🎓|🧑🏾‍🎤|🧑🏾‍🎨|🧑🏾‍🏫|🧑🏾‍🏭|🧑🏾‍💻|🧑🏾‍💼|🧑🏾‍🔧|🧑🏾‍🔬|🧑🏾‍🚀|🧑🏾‍🚒|🧑🏾‍🦯|🧑🏾‍🦰|🧑🏾‍🦱|🧑🏾‍🦲|🧑🏾‍🦳|🧑🏾‍🦼|🧑🏾‍🦽|🧑🏿‍🌾|🧑🏿‍🍳}]/v`, + String.raw`/[\q{🧑🏿‍🍼|🧑🏿‍🎄|🧑🏿‍🎓|🧑🏿‍🎤|🧑🏿‍🎨|🧑🏿‍🏫|🧑🏿‍🏭|🧑🏿‍💻|🧑🏿‍💼|🧑🏿‍🔧|🧑🏿‍🔬|🧑🏿‍🚀|🧑🏿‍🚒|🧑🏿‍🦯|🧑🏿‍🦰|🧑🏿‍🦱|🧑🏿‍🦲|🧑🏿‍🦳|🧑🏿‍🦼|🧑🏿‍🦽}]/v`, + String.raw`/[\q{🧔‍♀️|🧔‍♂️|🧖‍♀️|🧖‍♂️|🧗‍♀️|🧗‍♂️|🧘‍♀️|🧘‍♂️|🧙‍♀️|🧙‍♂️|🧚‍♀️|🧚‍♂️|🧛‍♀️|🧛‍♂️|🧜‍♀️|🧜‍♂️|🧝‍♀️|🧝‍♂️|🧞‍♀️|🧞‍♂️}]/v`, + String.raw`/[\q{🧟‍♀️|🧟‍♂️|⛹️‍♀️|⛹️‍♂️|⛹🏻‍♀️|⛹🏻‍♂️|⛹🏼‍♀️|⛹🏼‍♂️|⛹🏽‍♀️|⛹🏽‍♂️|⛹🏾‍♀️|⛹🏾‍♂️|⛹🏿‍♀️|⛹🏿‍♂️|🏃🏻‍♀️|🏃🏻‍♂️|🏃🏼‍♀️|🏃🏼‍♂️|🏃🏽‍♀️|🏃🏽‍♂️}]/v`, + String.raw`/[\q{🏃🏾‍♀️|🏃🏾‍♂️|🏃🏿‍♀️|🏃🏿‍♂️|🏄🏻‍♀️|🏄🏻‍♂️|🏄🏼‍♀️|🏄🏼‍♂️|🏄🏽‍♀️|🏄🏽‍♂️|🏄🏾‍♀️|🏄🏾‍♂️|🏄🏿‍♀️|🏄🏿‍♂️|🏊🏻‍♀️|🏊🏻‍♂️|🏊🏼‍♀️|🏊🏼‍♂️|🏊🏽‍♀️|🏊🏽‍♂️}]/v`, + String.raw`/[\q{🏊🏾‍♀️|🏊🏾‍♂️|🏊🏿‍♀️|🏊🏿‍♂️|🏋️‍♀️|🏋️‍♂️|🏋🏻‍♀️|🏋🏻‍♂️|🏋🏼‍♀️|🏋🏼‍♂️|🏋🏽‍♀️|🏋🏽‍♂️|🏋🏾‍♀️|🏋🏾‍♂️|🏋🏿‍♀️|🏋🏿‍♂️|🏌️‍♀️|🏌️‍♂️|🏌🏻‍♀️|🏌🏻‍♂️}]/v`, + String.raw`/[\q{🏌🏼‍♀️|🏌🏼‍♂️|🏌🏽‍♀️|🏌🏽‍♂️|🏌🏾‍♀️|🏌🏾‍♂️|🏌🏿‍♀️|🏌🏿‍♂️|🏳️‍⚧️|👁️‍🗨️|👨‍👦‍👦|👨‍👧‍👦|👨‍👧‍👧|👨‍👨‍👦|👨‍👨‍👧|👨‍👩‍👦|👨‍👩‍👧|👨🏻‍⚕️|👨🏻‍⚖️|👨🏻‍✈️}]/v`, + String.raw`/[\q{👨🏼‍⚕️|👨🏼‍⚖️|👨🏼‍✈️|👨🏽‍⚕️|👨🏽‍⚖️|👨🏽‍✈️|👨🏾‍⚕️|👨🏾‍⚖️|👨🏾‍✈️|👨🏿‍⚕️|👨🏿‍⚖️|👨🏿‍✈️|👩‍👦‍👦|👩‍👧‍👦|👩‍👧‍👧|👩‍👩‍👦|👩‍👩‍👧|👩🏻‍⚕️|👩🏻‍⚖️|👩🏻‍✈️}]/v`, + String.raw`/[\q{👩🏼‍⚕️|👩🏼‍⚖️|👩🏼‍✈️|👩🏽‍⚕️|👩🏽‍⚖️|👩🏽‍✈️|👩🏾‍⚕️|👩🏾‍⚖️|👩🏾‍✈️|👩🏿‍⚕️|👩🏿‍⚖️|👩🏿‍✈️|👮🏻‍♀️|👮🏻‍♂️|👮🏼‍♀️|👮🏼‍♂️|👮🏽‍♀️|👮🏽‍♂️|👮🏾‍♀️|👮🏾‍♂️}]/v`, + String.raw`/[\q{👮🏿‍♀️|👮🏿‍♂️|👰🏻‍♀️|👰🏻‍♂️|👰🏼‍♀️|👰🏼‍♂️|👰🏽‍♀️|👰🏽‍♂️|👰🏾‍♀️|👰🏾‍♂️|👰🏿‍♀️|👰🏿‍♂️|👱🏻‍♀️|👱🏻‍♂️|👱🏼‍♀️|👱🏼‍♂️|👱🏽‍♀️|👱🏽‍♂️|👱🏾‍♀️|👱🏾‍♂️}]/v`, + String.raw`/[\q{👱🏿‍♀️|👱🏿‍♂️|👳🏻‍♀️|👳🏻‍♂️|👳🏼‍♀️|👳🏼‍♂️|👳🏽‍♀️|👳🏽‍♂️|👳🏾‍♀️|👳🏾‍♂️|👳🏿‍♀️|👳🏿‍♂️|👷🏻‍♀️|👷🏻‍♂️|👷🏼‍♀️|👷🏼‍♂️|👷🏽‍♀️|👷🏽‍♂️|👷🏾‍♀️|👷🏾‍♂️}]/v`, + String.raw`/[\q{👷🏿‍♀️|👷🏿‍♂️|💁🏻‍♀️|💁🏻‍♂️|💁🏼‍♀️|💁🏼‍♂️|💁🏽‍♀️|💁🏽‍♂️|💁🏾‍♀️|💁🏾‍♂️|💁🏿‍♀️|💁🏿‍♂️|💂🏻‍♀️|💂🏻‍♂️|💂🏼‍♀️|💂🏼‍♂️|💂🏽‍♀️|💂🏽‍♂️|💂🏾‍♀️|💂🏾‍♂️}]/v`, + String.raw`/[\q{💂🏿‍♀️|💂🏿‍♂️|💆🏻‍♀️|💆🏻‍♂️|💆🏼‍♀️|💆🏼‍♂️|💆🏽‍♀️|💆🏽‍♂️|💆🏾‍♀️|💆🏾‍♂️|💆🏿‍♀️|💆🏿‍♂️|💇🏻‍♀️|💇🏻‍♂️|💇🏼‍♀️|💇🏼‍♂️|💇🏽‍♀️|💇🏽‍♂️|💇🏾‍♀️|💇🏾‍♂️}]/v`, + String.raw`/[\q{💇🏿‍♀️|💇🏿‍♂️|🕵️‍♀️|🕵️‍♂️|🕵🏻‍♀️|🕵🏻‍♂️|🕵🏼‍♀️|🕵🏼‍♂️|🕵🏽‍♀️|🕵🏽‍♂️|🕵🏾‍♀️|🕵🏾‍♂️|🕵🏿‍♀️|🕵🏿‍♂️|🙅🏻‍♀️|🙅🏻‍♂️|🙅🏼‍♀️|🙅🏼‍♂️|🙅🏽‍♀️|🙅🏽‍♂️}]/v`, + String.raw`/[\q{🙅🏾‍♀️|🙅🏾‍♂️|🙅🏿‍♀️|🙅🏿‍♂️|🙆🏻‍♀️|🙆🏻‍♂️|🙆🏼‍♀️|🙆🏼‍♂️|🙆🏽‍♀️|🙆🏽‍♂️|🙆🏾‍♀️|🙆🏾‍♂️|🙆🏿‍♀️|🙆🏿‍♂️|🙇🏻‍♀️|🙇🏻‍♂️|🙇🏼‍♀️|🙇🏼‍♂️|🙇🏽‍♀️|🙇🏽‍♂️}]/v`, + String.raw`/[\q{🙇🏾‍♀️|🙇🏾‍♂️|🙇🏿‍♀️|🙇🏿‍♂️|🙋🏻‍♀️|🙋🏻‍♂️|🙋🏼‍♀️|🙋🏼‍♂️|🙋🏽‍♀️|🙋🏽‍♂️|🙋🏾‍♀️|🙋🏾‍♂️|🙋🏿‍♀️|🙋🏿‍♂️|🙍🏻‍♀️|🙍🏻‍♂️|🙍🏼‍♀️|🙍🏼‍♂️|🙍🏽‍♀️|🙍🏽‍♂️}]/v`, + String.raw`/[\q{🙍🏾‍♀️|🙍🏾‍♂️|🙍🏿‍♀️|🙍🏿‍♂️|🙎🏻‍♀️|🙎🏻‍♂️|🙎🏼‍♀️|🙎🏼‍♂️|🙎🏽‍♀️|🙎🏽‍♂️|🙎🏾‍♀️|🙎🏾‍♂️|🙎🏿‍♀️|🙎🏿‍♂️|🚣🏻‍♀️|🚣🏻‍♂️|🚣🏼‍♀️|🚣🏼‍♂️|🚣🏽‍♀️|🚣🏽‍♂️}]/v`, + String.raw`/[\q{🚣🏾‍♀️|🚣🏾‍♂️|🚣🏿‍♀️|🚣🏿‍♂️|🚴🏻‍♀️|🚴🏻‍♂️|🚴🏼‍♀️|🚴🏼‍♂️|🚴🏽‍♀️|🚴🏽‍♂️|🚴🏾‍♀️|🚴🏾‍♂️|🚴🏿‍♀️|🚴🏿‍♂️|🚵🏻‍♀️|🚵🏻‍♂️|🚵🏼‍♀️|🚵🏼‍♂️|🚵🏽‍♀️|🚵🏽‍♂️}]/v`, + String.raw`/[\q{🚵🏾‍♀️|🚵🏾‍♂️|🚵🏿‍♀️|🚵🏿‍♂️|🚶🏻‍♀️|🚶🏻‍♂️|🚶🏼‍♀️|🚶🏼‍♂️|🚶🏽‍♀️|🚶🏽‍♂️|🚶🏾‍♀️|🚶🏾‍♂️|🚶🏿‍♀️|🚶🏿‍♂️|🤦🏻‍♀️|🤦🏻‍♂️|🤦🏼‍♀️|🤦🏼‍♂️|🤦🏽‍♀️|🤦🏽‍♂️}]/v`, + String.raw`/[\q{🤦🏾‍♀️|🤦🏾‍♂️|🤦🏿‍♀️|🤦🏿‍♂️|🤵🏻‍♀️|🤵🏻‍♂️|🤵🏼‍♀️|🤵🏼‍♂️|🤵🏽‍♀️|🤵🏽‍♂️|🤵🏾‍♀️|🤵🏾‍♂️|🤵🏿‍♀️|🤵🏿‍♂️|🤷🏻‍♀️|🤷🏻‍♂️|🤷🏼‍♀️|🤷🏼‍♂️|🤷🏽‍♀️|🤷🏽‍♂️}]/v`, + String.raw`/[\q{🤷🏾‍♀️|🤷🏾‍♂️|🤷🏿‍♀️|🤷🏿‍♂️|🤸🏻‍♀️|🤸🏻‍♂️|🤸🏼‍♀️|🤸🏼‍♂️|🤸🏽‍♀️|🤸🏽‍♂️|🤸🏾‍♀️|🤸🏾‍♂️|🤸🏿‍♀️|🤸🏿‍♂️|🤹🏻‍♀️|🤹🏻‍♂️|🤹🏼‍♀️|🤹🏼‍♂️|🤹🏽‍♀️|🤹🏽‍♂️}]/v`, + String.raw`/[\q{🤹🏾‍♀️|🤹🏾‍♂️|🤹🏿‍♀️|🤹🏿‍♂️|🤽🏻‍♀️|🤽🏻‍♂️|🤽🏼‍♀️|🤽🏼‍♂️|🤽🏽‍♀️|🤽🏽‍♂️|🤽🏾‍♀️|🤽🏾‍♂️|🤽🏿‍♀️|🤽🏿‍♂️|🤾🏻‍♀️|🤾🏻‍♂️|🤾🏼‍♀️|🤾🏼‍♂️|🤾🏽‍♀️|🤾🏽‍♂️}]/v`, + String.raw`/[\q{🤾🏾‍♀️|🤾🏾‍♂️|🤾🏿‍♀️|🤾🏿‍♂️|🦸🏻‍♀️|🦸🏻‍♂️|🦸🏼‍♀️|🦸🏼‍♂️|🦸🏽‍♀️|🦸🏽‍♂️|🦸🏾‍♀️|🦸🏾‍♂️|🦸🏿‍♀️|🦸🏿‍♂️|🦹🏻‍♀️|🦹🏻‍♂️|🦹🏼‍♀️|🦹🏼‍♂️|🦹🏽‍♀️|🦹🏽‍♂️}]/v`, + String.raw`/[\q{🦹🏾‍♀️|🦹🏾‍♂️|🦹🏿‍♀️|🦹🏿‍♂️|🧍🏻‍♀️|🧍🏻‍♂️|🧍🏼‍♀️|🧍🏼‍♂️|🧍🏽‍♀️|🧍🏽‍♂️|🧍🏾‍♀️|🧍🏾‍♂️|🧍🏿‍♀️|🧍🏿‍♂️|🧎🏻‍♀️|🧎🏻‍♂️|🧎🏼‍♀️|🧎🏼‍♂️|🧎🏽‍♀️|🧎🏽‍♂️}]/v`, + String.raw`/[\q{🧎🏾‍♀️|🧎🏾‍♂️|🧎🏿‍♀️|🧎🏿‍♂️|🧏🏻‍♀️|🧏🏻‍♂️|🧏🏼‍♀️|🧏🏼‍♂️|🧏🏽‍♀️|🧏🏽‍♂️|🧏🏾‍♀️|🧏🏾‍♂️|🧏🏿‍♀️|🧏🏿‍♂️|🧑‍🤝‍🧑|🧑🏻‍⚕️|🧑🏻‍⚖️|🧑🏻‍✈️|🧑🏼‍⚕️|🧑🏼‍⚖️}]/v`, + String.raw`/[\q{🧑🏼‍✈️|🧑🏽‍⚕️|🧑🏽‍⚖️|🧑🏽‍✈️|🧑🏾‍⚕️|🧑🏾‍⚖️|🧑🏾‍✈️|🧑🏿‍⚕️|🧑🏿‍⚖️|🧑🏿‍✈️|🧔🏻‍♀️|🧔🏻‍♂️|🧔🏼‍♀️|🧔🏼‍♂️|🧔🏽‍♀️|🧔🏽‍♂️|🧔🏾‍♀️|🧔🏾‍♂️|🧔🏿‍♀️|🧔🏿‍♂️}]/v`, + String.raw`/[\q{🧖🏻‍♀️|🧖🏻‍♂️|🧖🏼‍♀️|🧖🏼‍♂️|🧖🏽‍♀️|🧖🏽‍♂️|🧖🏾‍♀️|🧖🏾‍♂️|🧖🏿‍♀️|🧖🏿‍♂️|🧗🏻‍♀️|🧗🏻‍♂️|🧗🏼‍♀️|🧗🏼‍♂️|🧗🏽‍♀️|🧗🏽‍♂️|🧗🏾‍♀️|🧗🏾‍♂️|🧗🏿‍♀️|🧗🏿‍♂️}]/v`, + String.raw`/[\q{🧘🏻‍♀️|🧘🏻‍♂️|🧘🏼‍♀️|🧘🏼‍♂️|🧘🏽‍♀️|🧘🏽‍♂️|🧘🏾‍♀️|🧘🏾‍♂️|🧘🏿‍♀️|🧘🏿‍♂️|🧙🏻‍♀️|🧙🏻‍♂️|🧙🏼‍♀️|🧙🏼‍♂️|🧙🏽‍♀️|🧙🏽‍♂️|🧙🏾‍♀️|🧙🏾‍♂️|🧙🏿‍♀️|🧙🏿‍♂️}]/v`, + String.raw`/[\q{🧚🏻‍♀️|🧚🏻‍♂️|🧚🏼‍♀️|🧚🏼‍♂️|🧚🏽‍♀️|🧚🏽‍♂️|🧚🏾‍♀️|🧚🏾‍♂️|🧚🏿‍♀️|🧚🏿‍♂️|🧛🏻‍♀️|🧛🏻‍♂️|🧛🏼‍♀️|🧛🏼‍♂️|🧛🏽‍♀️|🧛🏽‍♂️|🧛🏾‍♀️|🧛🏾‍♂️|🧛🏿‍♀️|🧛🏿‍♂️}]/v`, + String.raw`/[\q{🧜🏻‍♀️|🧜🏻‍♂️|🧜🏼‍♀️|🧜🏼‍♂️|🧜🏽‍♀️|🧜🏽‍♂️|🧜🏾‍♀️|🧜🏾‍♂️|🧜🏿‍♀️|🧜🏿‍♂️|🧝🏻‍♀️|🧝🏻‍♂️|🧝🏼‍♀️|🧝🏼‍♂️|🧝🏽‍♀️|🧝🏽‍♂️|🧝🏾‍♀️|🧝🏾‍♂️|🧝🏿‍♀️|🧝🏿‍♂️}]/v`, + String.raw`/[\q{🫱🏻‍🫲🏼|🫱🏻‍🫲🏽|🫱🏻‍🫲🏾|🫱🏻‍🫲🏿|🫱🏼‍🫲🏻|🫱🏼‍🫲🏽|🫱🏼‍🫲🏾|🫱🏼‍🫲🏿|🫱🏽‍🫲🏻|🫱🏽‍🫲🏼|🫱🏽‍🫲🏾|🫱🏽‍🫲🏿|🫱🏾‍🫲🏻|🫱🏾‍🫲🏼|🫱🏾‍🫲🏽|🫱🏾‍🫲🏿|🫱🏿‍🫲🏻|🫱🏿‍🫲🏼|🫱🏿‍🫲🏽|🫱🏿‍🫲🏾}]/v`, + String.raw`/[\q{👨‍❤️‍👨|👩‍❤️‍👨|👩‍❤️‍👩|👨‍👨‍👦‍👦|👨‍👨‍👧‍👦|👨‍👨‍👧‍👧|👨‍👩‍👦‍👦|👨‍👩‍👧‍👦|👨‍👩‍👧‍👧|👨🏻‍🤝‍👨🏼|👨🏻‍🤝‍👨🏽|👨🏻‍🤝‍👨🏾|👨🏻‍🤝‍👨🏿|👨🏼‍🤝‍👨🏻|👨🏼‍🤝‍👨🏽|👨🏼‍🤝‍👨🏾|👨🏼‍🤝‍👨🏿|👨🏽‍🤝‍👨🏻|👨🏽‍🤝‍👨🏼|👨🏽‍🤝‍👨🏾}]/v`, + String.raw`/[\q{👨🏽‍🤝‍👨🏿|👨🏾‍🤝‍👨🏻|👨🏾‍🤝‍👨🏼|👨🏾‍🤝‍👨🏽|👨🏾‍🤝‍👨🏿|👨🏿‍🤝‍👨🏻|👨🏿‍🤝‍👨🏼|👨🏿‍🤝‍👨🏽|👨🏿‍🤝‍👨🏾|👩‍👩‍👦‍👦|👩‍👩‍👧‍👦|👩‍👩‍👧‍👧|👩🏻‍🤝‍👨🏼|👩🏻‍🤝‍👨🏽|👩🏻‍🤝‍👨🏾|👩🏻‍🤝‍👨🏿|👩🏻‍🤝‍👩🏼|👩🏻‍🤝‍👩🏽|👩🏻‍🤝‍👩🏾|👩🏻‍🤝‍👩🏿}]/v`, + String.raw`/[\q{👩🏼‍🤝‍👨🏻|👩🏼‍🤝‍👨🏽|👩🏼‍🤝‍👨🏾|👩🏼‍🤝‍👨🏿|👩🏼‍🤝‍👩🏻|👩🏼‍🤝‍👩🏽|👩🏼‍🤝‍👩🏾|👩🏼‍🤝‍👩🏿|👩🏽‍🤝‍👨🏻|👩🏽‍🤝‍👨🏼|👩🏽‍🤝‍👨🏾|👩🏽‍🤝‍👨🏿|👩🏽‍🤝‍👩🏻|👩🏽‍🤝‍👩🏼|👩🏽‍🤝‍👩🏾|👩🏽‍🤝‍👩🏿|👩🏾‍🤝‍👨🏻|👩🏾‍🤝‍👨🏼|👩🏾‍🤝‍👨🏽|👩🏾‍🤝‍👨🏿}]/v`, + String.raw`/[\q{👩🏾‍🤝‍👩🏻|👩🏾‍🤝‍👩🏼|👩🏾‍🤝‍👩🏽|👩🏾‍🤝‍👩🏿|👩🏿‍🤝‍👨🏻|👩🏿‍🤝‍👨🏼|👩🏿‍🤝‍👨🏽|👩🏿‍🤝‍👨🏾|👩🏿‍🤝‍👩🏻|👩🏿‍🤝‍👩🏼|👩🏿‍🤝‍👩🏽|👩🏿‍🤝‍👩🏾|🧑🏻‍🤝‍🧑🏻|🧑🏻‍🤝‍🧑🏼|🧑🏻‍🤝‍🧑🏽|🧑🏻‍🤝‍🧑🏾|🧑🏻‍🤝‍🧑🏿|🧑🏼‍🤝‍🧑🏻|🧑🏼‍🤝‍🧑🏼|🧑🏼‍🤝‍🧑🏽}]/v`, + String.raw`/[\q{🧑🏼‍🤝‍🧑🏾|🧑🏼‍🤝‍🧑🏿|🧑🏽‍🤝‍🧑🏻|🧑🏽‍🤝‍🧑🏼|🧑🏽‍🤝‍🧑🏽|🧑🏽‍🤝‍🧑🏾|🧑🏽‍🤝‍🧑🏿|🧑🏾‍🤝‍🧑🏻|🧑🏾‍🤝‍🧑🏼|🧑🏾‍🤝‍🧑🏽|🧑🏾‍🤝‍🧑🏾|🧑🏾‍🤝‍🧑🏿|🧑🏿‍🤝‍🧑🏻|🧑🏿‍🤝‍🧑🏼|🧑🏿‍🤝‍🧑🏽|🧑🏿‍🤝‍🧑🏾|🧑🏿‍🤝‍🧑🏿|👨‍❤️‍💋‍👨|👨🏻‍❤️‍👨🏻|👨🏻‍❤️‍👨🏼}]/v`, + String.raw`/[\q{👨🏻‍❤️‍👨🏽|👨🏻‍❤️‍👨🏾|👨🏻‍❤️‍👨🏿|👨🏼‍❤️‍👨🏻|👨🏼‍❤️‍👨🏼|👨🏼‍❤️‍👨🏽|👨🏼‍❤️‍👨🏾|👨🏼‍❤️‍👨🏿|👨🏽‍❤️‍👨🏻|👨🏽‍❤️‍👨🏼|👨🏽‍❤️‍👨🏽|👨🏽‍❤️‍👨🏾|👨🏽‍❤️‍👨🏿|👨🏾‍❤️‍👨🏻|👨🏾‍❤️‍👨🏼|👨🏾‍❤️‍👨🏽|👨🏾‍❤️‍👨🏾|👨🏾‍❤️‍👨🏿|👨🏿‍❤️‍👨🏻|👨🏿‍❤️‍👨🏼}]/v`, + String.raw`/[\q{👨🏿‍❤️‍👨🏽|👨🏿‍❤️‍👨🏾|👨🏿‍❤️‍👨🏿|👩‍❤️‍💋‍👨|👩‍❤️‍💋‍👩|👩🏻‍❤️‍👨🏻|👩🏻‍❤️‍👨🏼|👩🏻‍❤️‍👨🏽|👩🏻‍❤️‍👨🏾|👩🏻‍❤️‍👨🏿|👩🏻‍❤️‍👩🏻|👩🏻‍❤️‍👩🏼|👩🏻‍❤️‍👩🏽|👩🏻‍❤️‍👩🏾|👩🏻‍❤️‍👩🏿|👩🏼‍❤️‍👨🏻|👩🏼‍❤️‍👨🏼|👩🏼‍❤️‍👨🏽|👩🏼‍❤️‍👨🏾|👩🏼‍❤️‍👨🏿}]/v`, + String.raw`/[\q{👩🏼‍❤️‍👩🏻|👩🏼‍❤️‍👩🏼|👩🏼‍❤️‍👩🏽|👩🏼‍❤️‍👩🏾|👩🏼‍❤️‍👩🏿|👩🏽‍❤️‍👨🏻|👩🏽‍❤️‍👨🏼|👩🏽‍❤️‍👨🏽|👩🏽‍❤️‍👨🏾|👩🏽‍❤️‍👨🏿|👩🏽‍❤️‍👩🏻|👩🏽‍❤️‍👩🏼|👩🏽‍❤️‍👩🏽|👩🏽‍❤️‍👩🏾|👩🏽‍❤️‍👩🏿|👩🏾‍❤️‍👨🏻|👩🏾‍❤️‍👨🏼|👩🏾‍❤️‍👨🏽|👩🏾‍❤️‍👨🏾|👩🏾‍❤️‍👨🏿}]/v`, + String.raw`/[\q{👩🏾‍❤️‍👩🏻|👩🏾‍❤️‍👩🏼|👩🏾‍❤️‍👩🏽|👩🏾‍❤️‍👩🏾|👩🏾‍❤️‍👩🏿|👩🏿‍❤️‍👨🏻|👩🏿‍❤️‍👨🏼|👩🏿‍❤️‍👨🏽|👩🏿‍❤️‍👨🏾|👩🏿‍❤️‍👨🏿|👩🏿‍❤️‍👩🏻|👩🏿‍❤️‍👩🏼|👩🏿‍❤️‍👩🏽|👩🏿‍❤️‍👩🏾|👩🏿‍❤️‍👩🏿|🧑🏻‍❤️‍🧑🏼|🧑🏻‍❤️‍🧑🏽|🧑🏻‍❤️‍🧑🏾|🧑🏻‍❤️‍🧑🏿|🧑🏼‍❤️‍🧑🏻}]/v`, + String.raw`/[\q{🧑🏼‍❤️‍🧑🏽|🧑🏼‍❤️‍🧑🏾|🧑🏼‍❤️‍🧑🏿|🧑🏽‍❤️‍🧑🏻|🧑🏽‍❤️‍🧑🏼|🧑🏽‍❤️‍🧑🏾|🧑🏽‍❤️‍🧑🏿|🧑🏾‍❤️‍🧑🏻|🧑🏾‍❤️‍🧑🏼|🧑🏾‍❤️‍🧑🏽|🧑🏾‍❤️‍🧑🏿|🧑🏿‍❤️‍🧑🏻|🧑🏿‍❤️‍🧑🏼|🧑🏿‍❤️‍🧑🏽|🧑🏿‍❤️‍🧑🏾|👨🏻‍❤️‍💋‍👨🏻|👨🏻‍❤️‍💋‍👨🏼|👨🏻‍❤️‍💋‍👨🏽|👨🏻‍❤️‍💋‍👨🏾|👨🏻‍❤️‍💋‍👨🏿}]/v`, + String.raw`/[\q{👨🏼‍❤️‍💋‍👨🏻|👨🏼‍❤️‍💋‍👨🏼|👨🏼‍❤️‍💋‍👨🏽|👨🏼‍❤️‍💋‍👨🏾|👨🏼‍❤️‍💋‍👨🏿|👨🏽‍❤️‍💋‍👨🏻|👨🏽‍❤️‍💋‍👨🏼|👨🏽‍❤️‍💋‍👨🏽|👨🏽‍❤️‍💋‍👨🏾|👨🏽‍❤️‍💋‍👨🏿|👨🏾‍❤️‍💋‍👨🏻|👨🏾‍❤️‍💋‍👨🏼|👨🏾‍❤️‍💋‍👨🏽|👨🏾‍❤️‍💋‍👨🏾|👨🏾‍❤️‍💋‍👨🏿|👨🏿‍❤️‍💋‍👨🏻|👨🏿‍❤️‍💋‍👨🏼|👨🏿‍❤️‍💋‍👨🏽|👨🏿‍❤️‍💋‍👨🏾|👨🏿‍❤️‍💋‍👨🏿}]/v`, + String.raw`/[\q{👩🏻‍❤️‍💋‍👨🏻|👩🏻‍❤️‍💋‍👨🏼|👩🏻‍❤️‍💋‍👨🏽|👩🏻‍❤️‍💋‍👨🏾|👩🏻‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👩🏻|👩🏻‍❤️‍💋‍👩🏼|👩🏻‍❤️‍💋‍👩🏽|👩🏻‍❤️‍💋‍👩🏾|👩🏻‍❤️‍💋‍👩🏿|👩🏼‍❤️‍💋‍👨🏻|👩🏼‍❤️‍💋‍👨🏼|👩🏼‍❤️‍💋‍👨🏽|👩🏼‍❤️‍💋‍👨🏾|👩🏼‍❤️‍💋‍👨🏿|👩🏼‍❤️‍💋‍👩🏻|👩🏼‍❤️‍💋‍👩🏼|👩🏼‍❤️‍💋‍👩🏽|👩🏼‍❤️‍💋‍👩🏾|👩🏼‍❤️‍💋‍👩🏿}]/v`, + String.raw`/[\q{👩🏽‍❤️‍💋‍👨🏻|👩🏽‍❤️‍💋‍👨🏼|👩🏽‍❤️‍💋‍👨🏽|👩🏽‍❤️‍💋‍👨🏾|👩🏽‍❤️‍💋‍👨🏿|👩🏽‍❤️‍💋‍👩🏻|👩🏽‍❤️‍💋‍👩🏼|👩🏽‍❤️‍💋‍👩🏽|👩🏽‍❤️‍💋‍👩🏾|👩🏽‍❤️‍💋‍👩🏿|👩🏾‍❤️‍💋‍👨🏻|👩🏾‍❤️‍💋‍👨🏼|👩🏾‍❤️‍💋‍👨🏽|👩🏾‍❤️‍💋‍👨🏾|👩🏾‍❤️‍💋‍👨🏿|👩🏾‍❤️‍💋‍👩🏻|👩🏾‍❤️‍💋‍👩🏼|👩🏾‍❤️‍💋‍👩🏽|👩🏾‍❤️‍💋‍👩🏾|👩🏾‍❤️‍💋‍👩🏿}]/v`, + String.raw`/[\q{👩🏿‍❤️‍💋‍👨🏻|👩🏿‍❤️‍💋‍👨🏼|👩🏿‍❤️‍💋‍👨🏽|👩🏿‍❤️‍💋‍👨🏾|👩🏿‍❤️‍💋‍👨🏿|👩🏿‍❤️‍💋‍👩🏻|👩🏿‍❤️‍💋‍👩🏼|👩🏿‍❤️‍💋‍👩🏽|👩🏿‍❤️‍💋‍👩🏾|👩🏿‍❤️‍💋‍👩🏿|🧑🏻‍❤️‍💋‍🧑🏼|🧑🏻‍❤️‍💋‍🧑🏽|🧑🏻‍❤️‍💋‍🧑🏾|🧑🏻‍❤️‍💋‍🧑🏿|🧑🏼‍❤️‍💋‍🧑🏻|🧑🏼‍❤️‍💋‍🧑🏽|🧑🏼‍❤️‍💋‍🧑🏾|🧑🏼‍❤️‍💋‍🧑🏿|🧑🏽‍❤️‍💋‍🧑🏻|🧑🏽‍❤️‍💋‍🧑🏼}]/v`, + String.raw`/[\q{🧑🏽‍❤️‍💋‍🧑🏾|🧑🏽‍❤️‍💋‍🧑🏿|🧑🏾‍❤️‍💋‍🧑🏻|🧑🏾‍❤️‍💋‍🧑🏼|🧑🏾‍❤️‍💋‍🧑🏽|🧑🏾‍❤️‍💋‍🧑🏿|🧑🏿‍❤️‍💋‍🧑🏻|🧑🏿‍❤️‍💋‍🧑🏼|🧑🏿‍❤️‍💋‍🧑🏽|🧑🏿‍❤️‍💋‍🧑🏾}]/v`, + + // Basic_Emoji + String.raw`/[\q{\u{a9}\u{fe0f}|\u{ae}\u{fe0f}|\u{203c}\u{fe0f}|\u{2049}\u{fe0f}|\u{2122}\u{fe0f}|\u{2139}\u{fe0f}|\u{2194}\u{fe0f}|\u{2195}\u{fe0f}|\u{2196}\u{fe0f}|\u{2197}\u{fe0f}|\u{2198}\u{fe0f}|\u{2199}\u{fe0f}|\u{21a9}\u{fe0f}|\u{21aa}\u{fe0f}|\u{2328}\u{fe0f}|\u{23cf}\u{fe0f}|\u{23ed}\u{fe0f}|\u{23ee}\u{fe0f}|\u{23ef}\u{fe0f}|\u{23f1}\u{fe0f}}]/v`, + String.raw`/[\q{\u{23f2}\u{fe0f}|\u{23f8}\u{fe0f}|\u{23f9}\u{fe0f}|\u{23fa}\u{fe0f}|\u{24c2}\u{fe0f}|\u{25aa}\u{fe0f}|\u{25ab}\u{fe0f}|\u{25b6}\u{fe0f}|\u{25c0}\u{fe0f}|\u{25fb}\u{fe0f}|\u{25fc}\u{fe0f}|\u{2600}\u{fe0f}|\u{2601}\u{fe0f}|\u{2602}\u{fe0f}|\u{2603}\u{fe0f}|\u{2604}\u{fe0f}|\u{260e}\u{fe0f}|\u{2611}\u{fe0f}|\u{2618}\u{fe0f}|\u{261d}\u{fe0f}}]/v`, + String.raw`/[\q{\u{2620}\u{fe0f}|\u{2622}\u{fe0f}|\u{2623}\u{fe0f}|\u{2626}\u{fe0f}|\u{262a}\u{fe0f}|\u{262e}\u{fe0f}|\u{262f}\u{fe0f}|\u{2638}\u{fe0f}|\u{2639}\u{fe0f}|\u{263a}\u{fe0f}|\u{2640}\u{fe0f}|\u{2642}\u{fe0f}|\u{265f}\u{fe0f}|\u{2660}\u{fe0f}|\u{2663}\u{fe0f}|\u{2665}\u{fe0f}|\u{2666}\u{fe0f}|\u{2668}\u{fe0f}|\u{267b}\u{fe0f}|\u{267e}\u{fe0f}}]/v`, + String.raw`/[\q{\u{2692}\u{fe0f}|\u{2694}\u{fe0f}|\u{2695}\u{fe0f}|\u{2696}\u{fe0f}|\u{2697}\u{fe0f}|\u{2699}\u{fe0f}|\u{269b}\u{fe0f}|\u{269c}\u{fe0f}|\u{26a0}\u{fe0f}|\u{26a7}\u{fe0f}|\u{26b0}\u{fe0f}|\u{26b1}\u{fe0f}|\u{26c8}\u{fe0f}|\u{26cf}\u{fe0f}|\u{26d1}\u{fe0f}|\u{26d3}\u{fe0f}|\u{26e9}\u{fe0f}|\u{26f0}\u{fe0f}|\u{26f1}\u{fe0f}|\u{26f4}\u{fe0f}}]/v`, + String.raw`/[\q{\u{26f7}\u{fe0f}|\u{26f8}\u{fe0f}|\u{26f9}\u{fe0f}|\u{2702}\u{fe0f}|\u{2708}\u{fe0f}|\u{2709}\u{fe0f}|\u{270c}\u{fe0f}|\u{270d}\u{fe0f}|\u{270f}\u{fe0f}|\u{2712}\u{fe0f}|\u{2714}\u{fe0f}|\u{2716}\u{fe0f}|\u{271d}\u{fe0f}|\u{2721}\u{fe0f}|\u{2733}\u{fe0f}|\u{2734}\u{fe0f}|\u{2744}\u{fe0f}|\u{2747}\u{fe0f}|\u{2763}\u{fe0f}|\u{2764}\u{fe0f}}]/v`, + String.raw`/[\q{\u{27a1}\u{fe0f}|\u{2934}\u{fe0f}|\u{2935}\u{fe0f}|\u{2b05}\u{fe0f}|\u{2b06}\u{fe0f}|\u{2b07}\u{fe0f}|\u{3030}\u{fe0f}|\u{303d}\u{fe0f}|\u{3297}\u{fe0f}|\u{3299}\u{fe0f}|\u{1f170}\u{fe0f}|\u{1f171}\u{fe0f}|\u{1f17e}\u{fe0f}|\u{1f17f}\u{fe0f}|\u{1f202}\u{fe0f}|\u{1f237}\u{fe0f}|\u{1f321}\u{fe0f}|\u{1f324}\u{fe0f}|\u{1f325}\u{fe0f}|\u{1f326}\u{fe0f}}]/v`, + String.raw`/[\q{\u{1f327}\u{fe0f}|\u{1f328}\u{fe0f}|\u{1f329}\u{fe0f}|\u{1f32a}\u{fe0f}|\u{1f32b}\u{fe0f}|\u{1f32c}\u{fe0f}|\u{1f336}\u{fe0f}|\u{1f37d}\u{fe0f}|\u{1f396}\u{fe0f}|\u{1f397}\u{fe0f}|\u{1f399}\u{fe0f}|\u{1f39a}\u{fe0f}|\u{1f39b}\u{fe0f}|\u{1f39e}\u{fe0f}|\u{1f39f}\u{fe0f}|\u{1f3cb}\u{fe0f}|\u{1f3cc}\u{fe0f}|\u{1f3cd}\u{fe0f}|\u{1f3ce}\u{fe0f}|\u{1f3d4}\u{fe0f}}]/v`, + String.raw`/[\q{\u{1f3d5}\u{fe0f}|\u{1f3d6}\u{fe0f}|\u{1f3d7}\u{fe0f}|\u{1f3d8}\u{fe0f}|\u{1f3d9}\u{fe0f}|\u{1f3da}\u{fe0f}|\u{1f3db}\u{fe0f}|\u{1f3dc}\u{fe0f}|\u{1f3dd}\u{fe0f}|\u{1f3de}\u{fe0f}|\u{1f3df}\u{fe0f}|\u{1f3f3}\u{fe0f}|\u{1f3f5}\u{fe0f}|\u{1f3f7}\u{fe0f}|\u{1f43f}\u{fe0f}|\u{1f441}\u{fe0f}|\u{1f4fd}\u{fe0f}|\u{1f549}\u{fe0f}|\u{1f54a}\u{fe0f}|\u{1f56f}\u{fe0f}}]/v`, + String.raw`/[\q{\u{1f570}\u{fe0f}|\u{1f573}\u{fe0f}|\u{1f574}\u{fe0f}|\u{1f575}\u{fe0f}|\u{1f576}\u{fe0f}|\u{1f577}\u{fe0f}|\u{1f578}\u{fe0f}|\u{1f579}\u{fe0f}|\u{1f587}\u{fe0f}|\u{1f58a}\u{fe0f}|\u{1f58b}\u{fe0f}|\u{1f58c}\u{fe0f}|\u{1f58d}\u{fe0f}|\u{1f590}\u{fe0f}|\u{1f5a5}\u{fe0f}|\u{1f5a8}\u{fe0f}|\u{1f5b1}\u{fe0f}|\u{1f5b2}\u{fe0f}|\u{1f5bc}\u{fe0f}|\u{1f5c2}\u{fe0f}}]/v`, + String.raw`/[\q{\u{1f5c3}\u{fe0f}|\u{1f5c4}\u{fe0f}|\u{1f5d1}\u{fe0f}|\u{1f5d2}\u{fe0f}|\u{1f5d3}\u{fe0f}|\u{1f5dc}\u{fe0f}|\u{1f5dd}\u{fe0f}|\u{1f5de}\u{fe0f}|\u{1f5e1}\u{fe0f}|\u{1f5e3}\u{fe0f}|\u{1f5e8}\u{fe0f}|\u{1f5ef}\u{fe0f}|\u{1f5f3}\u{fe0f}|\u{1f5fa}\u{fe0f}|\u{1f6cb}\u{fe0f}|\u{1f6cd}\u{fe0f}|\u{1f6ce}\u{fe0f}|\u{1f6cf}\u{fe0f}|\u{1f6e0}\u{fe0f}|\u{1f6e1}\u{fe0f}}]/v`, + String.raw`/[\q{\u{1f6e2}\u{fe0f}|\u{1f6e3}\u{fe0f}|\u{1f6e4}\u{fe0f}|\u{1f6e5}\u{fe0f}|\u{1f6e9}\u{fe0f}|\u{1f6f0}\u{fe0f}|\u{1f6f3}\u{fe0f}}]/v`, + // RGI_Emoji_Flag_Sequence + String.raw`/[\q{\u{1f1e6}\u{1f1e8}|\u{1f1e6}\u{1f1e9}|\u{1f1e6}\u{1f1ea}|\u{1f1e6}\u{1f1eb}|\u{1f1e6}\u{1f1ec}|\u{1f1e6}\u{1f1ee}|\u{1f1e6}\u{1f1f1}|\u{1f1e6}\u{1f1f2}|\u{1f1e6}\u{1f1f4}|\u{1f1e6}\u{1f1f6}|\u{1f1e6}\u{1f1f7}|\u{1f1e6}\u{1f1f8}|\u{1f1e6}\u{1f1f9}|\u{1f1e6}\u{1f1fa}|\u{1f1e6}\u{1f1fc}|\u{1f1e6}\u{1f1fd}|\u{1f1e6}\u{1f1ff}|\u{1f1e7}\u{1f1e6}|\u{1f1e7}\u{1f1e7}|\u{1f1e7}\u{1f1e9}}]/v`, + String.raw`/[\q{\u{1f1e7}\u{1f1ea}|\u{1f1e7}\u{1f1eb}|\u{1f1e7}\u{1f1ec}|\u{1f1e7}\u{1f1ed}|\u{1f1e7}\u{1f1ee}|\u{1f1e7}\u{1f1ef}|\u{1f1e7}\u{1f1f1}|\u{1f1e7}\u{1f1f2}|\u{1f1e7}\u{1f1f3}|\u{1f1e7}\u{1f1f4}|\u{1f1e7}\u{1f1f6}|\u{1f1e7}\u{1f1f7}|\u{1f1e7}\u{1f1f8}|\u{1f1e7}\u{1f1f9}|\u{1f1e7}\u{1f1fb}|\u{1f1e7}\u{1f1fc}|\u{1f1e7}\u{1f1fe}|\u{1f1e7}\u{1f1ff}|\u{1f1e8}\u{1f1e6}|\u{1f1e8}\u{1f1e8}}]/v`, + String.raw`/[\q{\u{1f1e8}\u{1f1e9}|\u{1f1e8}\u{1f1eb}|\u{1f1e8}\u{1f1ec}|\u{1f1e8}\u{1f1ed}|\u{1f1e8}\u{1f1ee}|\u{1f1e8}\u{1f1f0}|\u{1f1e8}\u{1f1f1}|\u{1f1e8}\u{1f1f2}|\u{1f1e8}\u{1f1f3}|\u{1f1e8}\u{1f1f4}|\u{1f1e8}\u{1f1f5}|\u{1f1e8}\u{1f1f7}|\u{1f1e8}\u{1f1fa}|\u{1f1e8}\u{1f1fb}|\u{1f1e8}\u{1f1fc}|\u{1f1e8}\u{1f1fd}|\u{1f1e8}\u{1f1fe}|\u{1f1e8}\u{1f1ff}|\u{1f1e9}\u{1f1ea}|\u{1f1e9}\u{1f1ec}}]/v`, + String.raw`/[\q{\u{1f1e9}\u{1f1ef}|\u{1f1e9}\u{1f1f0}|\u{1f1e9}\u{1f1f2}|\u{1f1e9}\u{1f1f4}|\u{1f1e9}\u{1f1ff}|\u{1f1ea}\u{1f1e6}|\u{1f1ea}\u{1f1e8}|\u{1f1ea}\u{1f1ea}|\u{1f1ea}\u{1f1ec}|\u{1f1ea}\u{1f1ed}|\u{1f1ea}\u{1f1f7}|\u{1f1ea}\u{1f1f8}|\u{1f1ea}\u{1f1f9}|\u{1f1ea}\u{1f1fa}|\u{1f1eb}\u{1f1ee}|\u{1f1eb}\u{1f1ef}|\u{1f1eb}\u{1f1f0}|\u{1f1eb}\u{1f1f2}|\u{1f1eb}\u{1f1f4}|\u{1f1eb}\u{1f1f7}}]/v`, + String.raw`/[\q{\u{1f1ec}\u{1f1e6}|\u{1f1ec}\u{1f1e7}|\u{1f1ec}\u{1f1e9}|\u{1f1ec}\u{1f1ea}|\u{1f1ec}\u{1f1eb}|\u{1f1ec}\u{1f1ec}|\u{1f1ec}\u{1f1ed}|\u{1f1ec}\u{1f1ee}|\u{1f1ec}\u{1f1f1}|\u{1f1ec}\u{1f1f2}|\u{1f1ec}\u{1f1f3}|\u{1f1ec}\u{1f1f5}|\u{1f1ec}\u{1f1f6}|\u{1f1ec}\u{1f1f7}|\u{1f1ec}\u{1f1f8}|\u{1f1ec}\u{1f1f9}|\u{1f1ec}\u{1f1fa}|\u{1f1ec}\u{1f1fc}|\u{1f1ec}\u{1f1fe}|\u{1f1ed}\u{1f1f0}}]/v`, + String.raw`/[\q{\u{1f1ed}\u{1f1f2}|\u{1f1ed}\u{1f1f3}|\u{1f1ed}\u{1f1f7}|\u{1f1ed}\u{1f1f9}|\u{1f1ed}\u{1f1fa}|\u{1f1ee}\u{1f1e8}|\u{1f1ee}\u{1f1e9}|\u{1f1ee}\u{1f1ea}|\u{1f1ee}\u{1f1f1}|\u{1f1ee}\u{1f1f2}|\u{1f1ee}\u{1f1f3}|\u{1f1ee}\u{1f1f4}|\u{1f1ee}\u{1f1f6}|\u{1f1ee}\u{1f1f7}|\u{1f1ee}\u{1f1f8}|\u{1f1ee}\u{1f1f9}|\u{1f1ef}\u{1f1ea}|\u{1f1ef}\u{1f1f2}|\u{1f1ef}\u{1f1f4}|\u{1f1ef}\u{1f1f5}}]/v`, + String.raw`/[\q{\u{1f1f0}\u{1f1ea}|\u{1f1f0}\u{1f1ec}|\u{1f1f0}\u{1f1ed}|\u{1f1f0}\u{1f1ee}|\u{1f1f0}\u{1f1f2}|\u{1f1f0}\u{1f1f3}|\u{1f1f0}\u{1f1f5}|\u{1f1f0}\u{1f1f7}|\u{1f1f0}\u{1f1fc}|\u{1f1f0}\u{1f1fe}|\u{1f1f0}\u{1f1ff}|\u{1f1f1}\u{1f1e6}|\u{1f1f1}\u{1f1e7}|\u{1f1f1}\u{1f1e8}|\u{1f1f1}\u{1f1ee}|\u{1f1f1}\u{1f1f0}|\u{1f1f1}\u{1f1f7}|\u{1f1f1}\u{1f1f8}|\u{1f1f1}\u{1f1f9}|\u{1f1f1}\u{1f1fa}}]/v`, + String.raw`/[\q{\u{1f1f1}\u{1f1fb}|\u{1f1f1}\u{1f1fe}|\u{1f1f2}\u{1f1e6}|\u{1f1f2}\u{1f1e8}|\u{1f1f2}\u{1f1e9}|\u{1f1f2}\u{1f1ea}|\u{1f1f2}\u{1f1eb}|\u{1f1f2}\u{1f1ec}|\u{1f1f2}\u{1f1ed}|\u{1f1f2}\u{1f1f0}|\u{1f1f2}\u{1f1f1}|\u{1f1f2}\u{1f1f2}|\u{1f1f2}\u{1f1f3}|\u{1f1f2}\u{1f1f4}|\u{1f1f2}\u{1f1f5}|\u{1f1f2}\u{1f1f6}|\u{1f1f2}\u{1f1f7}|\u{1f1f2}\u{1f1f8}|\u{1f1f2}\u{1f1f9}|\u{1f1f2}\u{1f1fa}}]/v`, + String.raw`/[\q{\u{1f1f2}\u{1f1fb}|\u{1f1f2}\u{1f1fc}|\u{1f1f2}\u{1f1fd}|\u{1f1f2}\u{1f1fe}|\u{1f1f2}\u{1f1ff}|\u{1f1f3}\u{1f1e6}|\u{1f1f3}\u{1f1e8}|\u{1f1f3}\u{1f1ea}|\u{1f1f3}\u{1f1eb}|\u{1f1f3}\u{1f1ec}|\u{1f1f3}\u{1f1ee}|\u{1f1f3}\u{1f1f1}|\u{1f1f3}\u{1f1f4}|\u{1f1f3}\u{1f1f5}|\u{1f1f3}\u{1f1f7}|\u{1f1f3}\u{1f1fa}|\u{1f1f3}\u{1f1ff}|\u{1f1f4}\u{1f1f2}|\u{1f1f5}\u{1f1e6}|\u{1f1f5}\u{1f1ea}}]/v`, + String.raw`/[\q{\u{1f1f5}\u{1f1eb}|\u{1f1f5}\u{1f1ec}|\u{1f1f5}\u{1f1ed}|\u{1f1f5}\u{1f1f0}|\u{1f1f5}\u{1f1f1}|\u{1f1f5}\u{1f1f2}|\u{1f1f5}\u{1f1f3}|\u{1f1f5}\u{1f1f7}|\u{1f1f5}\u{1f1f8}|\u{1f1f5}\u{1f1f9}|\u{1f1f5}\u{1f1fc}|\u{1f1f5}\u{1f1fe}|\u{1f1f6}\u{1f1e6}|\u{1f1f7}\u{1f1ea}|\u{1f1f7}\u{1f1f4}|\u{1f1f7}\u{1f1f8}|\u{1f1f7}\u{1f1fa}|\u{1f1f7}\u{1f1fc}|\u{1f1f8}\u{1f1e6}|\u{1f1f8}\u{1f1e7}}]/v`, + String.raw`/[\q{\u{1f1f8}\u{1f1e8}|\u{1f1f8}\u{1f1e9}|\u{1f1f8}\u{1f1ea}|\u{1f1f8}\u{1f1ec}|\u{1f1f8}\u{1f1ed}|\u{1f1f8}\u{1f1ee}|\u{1f1f8}\u{1f1ef}|\u{1f1f8}\u{1f1f0}|\u{1f1f8}\u{1f1f1}|\u{1f1f8}\u{1f1f2}|\u{1f1f8}\u{1f1f3}|\u{1f1f8}\u{1f1f4}|\u{1f1f8}\u{1f1f7}|\u{1f1f8}\u{1f1f8}|\u{1f1f8}\u{1f1f9}|\u{1f1f8}\u{1f1fb}|\u{1f1f8}\u{1f1fd}|\u{1f1f8}\u{1f1fe}|\u{1f1f8}\u{1f1ff}|\u{1f1f9}\u{1f1e6}}]/v`, + String.raw`/[\q{\u{1f1f9}\u{1f1e8}|\u{1f1f9}\u{1f1e9}|\u{1f1f9}\u{1f1eb}|\u{1f1f9}\u{1f1ec}|\u{1f1f9}\u{1f1ed}|\u{1f1f9}\u{1f1ef}|\u{1f1f9}\u{1f1f0}|\u{1f1f9}\u{1f1f1}|\u{1f1f9}\u{1f1f2}|\u{1f1f9}\u{1f1f3}|\u{1f1f9}\u{1f1f4}|\u{1f1f9}\u{1f1f7}|\u{1f1f9}\u{1f1f9}|\u{1f1f9}\u{1f1fb}|\u{1f1f9}\u{1f1fc}|\u{1f1f9}\u{1f1ff}|\u{1f1fa}\u{1f1e6}|\u{1f1fa}\u{1f1ec}|\u{1f1fa}\u{1f1f2}|\u{1f1fa}\u{1f1f3}}]/v`, + String.raw`/[\q{\u{1f1fa}\u{1f1f8}|\u{1f1fa}\u{1f1fe}|\u{1f1fa}\u{1f1ff}|\u{1f1fb}\u{1f1e6}|\u{1f1fb}\u{1f1e8}|\u{1f1fb}\u{1f1ea}|\u{1f1fb}\u{1f1ec}|\u{1f1fb}\u{1f1ee}|\u{1f1fb}\u{1f1f3}|\u{1f1fb}\u{1f1fa}|\u{1f1fc}\u{1f1eb}|\u{1f1fc}\u{1f1f8}|\u{1f1fd}\u{1f1f0}|\u{1f1fe}\u{1f1ea}|\u{1f1fe}\u{1f1f9}|\u{1f1ff}\u{1f1e6}|\u{1f1ff}\u{1f1f2}|\u{1f1ff}\u{1f1fc}}]/v`, + + String.raw`/[\q{竈|門|禰󠄀|豆|子}\q{煉󠄁|獄|杏|寿|郎}]/v`, + String.raw`/[\q{a|b|c|}]/v`, + ], + invalid: [ + { + code: String.raw`/[\q{abc}]/v`, + errors: [ + { + message: + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `(?:abc|[...])`) for strings instead.", + line: 1, + column: 6, + }, + ], + }, + { + code: String.raw`/[\q{a|bc|}]/v`, + errors: [ + { + message: + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `(?:bc|[...])`) for strings instead.", + line: 1, + column: 8, + }, + ], + }, + { + code: String.raw`/[\q{🇦🇨🇦🇩}]/v`, + errors: [ + { + message: + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `(?:🇦🇨🇦🇩|[...])`) for strings instead.", + line: 1, + column: 6, + }, + ], + }, + { + code: String.raw`/[\q{abc|def|ghi|j|k|lm|n}]/v`, + errors: [ + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `(?:abc|def|ghi|lm|[...])`) for strings instead.", + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `(?:abc|def|ghi|lm|[...])`) for strings instead.", + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `(?:abc|def|ghi|lm|[...])`) for strings instead.", + "Only single characters and graphemes are allowed inside character classes. Use regular alternatives (e.g. `(?:abc|def|ghi|lm|[...])`) for strings instead.", + ], + }, + ], +})