diff --git a/.changeset/funny-pens-peel.md b/.changeset/funny-pens-peel.md new file mode 100644 index 00000000..2116b2a1 --- /dev/null +++ b/.changeset/funny-pens-peel.md @@ -0,0 +1,5 @@ +--- +"htmljs-parser": patch +--- + +Fix regexp charset parsing issue. diff --git a/src/__tests__/fixtures/attr-regex-character-classes/__snapshots__/attr-regex-character-classes.expected.txt b/src/__tests__/fixtures/attr-regex-character-classes/__snapshots__/attr-regex-character-classes.expected.txt new file mode 100644 index 00000000..24288051 --- /dev/null +++ b/src/__tests__/fixtures/attr-regex-character-classes/__snapshots__/attr-regex-character-classes.expected.txt @@ -0,0 +1,51 @@ +1╭─
+ │ ││ │ ││ ││ │ ╰─ closeTagEnd(div) + │ ││ │ ││ ││ ╰─ closeTagName "div" + │ ││ │ ││ │╰─ closeTagStart " + │ ││ │ ││ ││ │ ╰─ closeTagEnd(div) + │ ││ │ ││ ││ ╰─ closeTagName "div" + │ ││ │ ││ │╰─ closeTagStart " + │ ││ │ ││ ││ │ ╰─ closeTagEnd(div) + │ ││ │ ││ ││ ╰─ closeTagName "div" + │ ││ │ ││ │╰─ closeTagStart " + │ ││ │ ││ ││ │ ╰─ closeTagEnd(div) + │ ││ │ ││ ││ ╰─ closeTagName "div" + │ ││ │ ││ │╰─ closeTagStart " + │ ││ │ ││ ││ │ ╰─ closeTagEnd(div) + │ ││ │ ││ ││ ╰─ closeTagName "div" + │ ││ │ ││ │╰─ closeTagStart " +
+
+
+
diff --git a/src/states/REGULAR_EXPRESSION.ts b/src/states/REGULAR_EXPRESSION.ts index 7afaa523..3432e301 100644 --- a/src/states/REGULAR_EXPRESSION.ts +++ b/src/states/REGULAR_EXPRESSION.ts @@ -18,16 +18,23 @@ export const REGULAR_EXPRESSION: StateDefinition = { exit() {}, char(code, regExp) { - if (code === CODE.BACK_SLASH) { - // Handle escape sequence - this.pos++; // skip \ - } else if (code === CODE.OPEN_SQUARE_BRACKET && regExp.isInCharSet) { - regExp.isInCharSet = true; - } else if (code === CODE.CLOSE_SQUARE_BRACKET && regExp.isInCharSet) { - regExp.isInCharSet = false; - } else if (code === CODE.FORWARD_SLASH && !regExp.isInCharSet) { - this.pos++; // skip / - this.exitState(); + switch (code) { + case CODE.BACK_SLASH: + // Handle escape sequence + this.pos++; // skip \ + break; + case CODE.OPEN_SQUARE_BRACKET: + regExp.isInCharSet = true; + break; + case CODE.CLOSE_SQUARE_BRACKET: + regExp.isInCharSet = false; + break; + case CODE.FORWARD_SLASH: + if (!regExp.isInCharSet) { + this.pos++; // skip / + this.exitState(); + } + break; } },