From 2b5976f709a5b6dafe19ca157d4309b3f7cb77be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 26 Oct 2026 13:55:51 -0400 Subject: [PATCH 1/5] chore: bump regjsparser to 0.14.0 --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5810646..6866da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "MIT", "devDependencies": { "nyc": "^18.0.0", - "regjsparser": "^0.12.0" + "regjsparser": "^0.14.0" } }, "node_modules/@ampproject/remapping": { @@ -973,9 +973,9 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -1302,13 +1302,13 @@ } }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.14.0.tgz", + "integrity": "sha512-ftmhQUEzt+GOeIuEI9MNhYMjaiAclv0DfFVOfZXN4FD5kt0VUjtWEfnss6+OfpAKeMhaRX5q2hh7C6JGdGx9Dg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" @@ -2348,9 +2348,9 @@ } }, "jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true }, "json5": { @@ -2589,12 +2589,12 @@ } }, "regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.14.0.tgz", + "integrity": "sha512-ftmhQUEzt+GOeIuEI9MNhYMjaiAclv0DfFVOfZXN4FD5kt0VUjtWEfnss6+OfpAKeMhaRX5q2hh7C6JGdGx9Dg==", "dev": true, "requires": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" } }, "release-zalgo": { diff --git a/package.json b/package.json index f3f230c..007d9a2 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,6 @@ }, "devDependencies": { "nyc": "^18.0.0", - "regjsparser": "^0.12.0" + "regjsparser": "^0.14.0" } } From 2f0b92dd9ae06c1f00fe2c0c9ac78c51026ed1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 26 Oct 2026 13:56:17 -0400 Subject: [PATCH 2/5] feat: support buffer boundary anchors --- regjsgen.js | 6 ++++++ tests/error-tests.js | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/regjsgen.js b/regjsgen.js index 1a383ba..220bb93 100644 --- a/regjsgen.js +++ b/regjsgen.js @@ -149,6 +149,12 @@ return '\\b'; case 'not-boundary': return '\\B'; + case 'start-buffer': + return '\\A'; + case 'end-buffer': + return '\\z'; + case 'end-buffer-optional-newline': + return '\\Z'; default: throw Error('Invalid assertion'); } diff --git a/tests/error-tests.js b/tests/error-tests.js index 810d265..0eaf68f 100644 --- a/tests/error-tests.js +++ b/tests/error-tests.js @@ -182,3 +182,8 @@ testGenerates( { 'type': 'alternative', 'body': [symbol('1'), value('null', 0)] }, '1\\0' ); + +// Buffer boundary anchors. +testGenerates('start-of-buffer anchor', { 'type': 'anchor', 'kind': 'start-buffer' }, '\\A'); +testGenerates('end-of-buffer anchor', { 'type': 'anchor', 'kind': 'end-buffer' }, '\\z'); +testGenerates('end-of-buffer anchor with an optional newline', { 'type': 'anchor', 'kind': 'end-buffer-optional-newline' }, '\\Z'); From eb2c53017a1930c2ea2cf6a2d92202bd0bc6678c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 26 Oct 2026 13:56:57 -0400 Subject: [PATCH 3/5] test: support new test fixtures from regjsparser --- tests/tests.js | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/tests/tests.js b/tests/tests.js index 0c2b489..8bf024b 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -5,6 +5,9 @@ var astNodesAreEquivalent = require('./equiv'); function runTests(data, options) { options || (options = {}); var excused = options.excused || [], + // When `flags` is `null`, each key is a regex literal such as `/\A/u` + // and carries its own flags. + literal = options.flags === null, flags = options.flags || '', features = options.features || {}; @@ -12,13 +15,22 @@ function runTests(data, options) { return data[name].type != 'error' && excused.indexOf(name) == -1; }); - keys.forEach(function(regex) { - var node = data[regex], - expected = JSON.stringify(regex), + keys.forEach(function(key) { + var node = data[key], + regex = key, + regexFlags = flags, + expected, generated, passed, stack; + if (literal) { + var match = /^\/([\s\S]*)\/([a-z]*)$/.exec(key); + regex = match[1]; + regexFlags = match[2]; + } + expected = JSON.stringify(regex); + // Ensure that the generated regex matches the original input. try { generated = JSON.stringify(generate(node)); @@ -43,8 +55,8 @@ function runTests(data, options) { // Compare the ASTs of the generated regex and the input regex. try { passed = astNodesAreEquivalent( - parse(regex, flags, features), - parse(generate(node), flags, features) + parse(regex, regexFlags, features), + parse(generate(node), regexFlags, features) ); } catch (error) { stack = error.stack; @@ -101,7 +113,19 @@ runTests(require('./test-data-unicode-set.json'), { 'flags': 'v', 'features': { 'unicodePropertyEscape': true, 'unicodeSet': true } }); +runTests(require('./test-data-named-groups-unicode-set.json'), { + 'flags': 'v', + 'features': { 'namedGroups': true, 'unicodeSet': true } +}); runTests(require('./test-data-modifiers-group.json'), { 'flags': '', - 'features': { 'modifiers': true } + 'features': { 'modifiers': true, 'namedGroups': true } +}); +runTests(require('./test-data-lookbehind-modifiers-group.json'), { + 'flags': '', + 'features': { 'lookbehind': true, 'modifiers': true } +}); +runTests(require('./test-data-buffer-boundaries.json'), { + 'flags': null, + 'features': { 'unicodeSet': true, 'bufferBoundaries': true, 'modifiers': true } }); From a623fda5ff6df271d2a4f1b1a95705608402f59d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 26 Oct 2026 13:57:09 -0400 Subject: [PATCH 4/5] update new test fixtures --- tests/test-data-buffer-boundaries.json | 2507 +++++++++++++++++ .../test-data-lookbehind-modifiers-group.json | 192 ++ tests/test-data-lookbehind.json | 33 +- tests/test-data-named-groups-unicode-set.json | 84 + tests/test-data-named-groups-unicode.json | 124 + tests/test-data-named-groups.json | 921 ++++++ tests/test-data-unicode-set.json | 2141 +++++++++++++- tests/test-data-unicode.json | 112 + tests/test-data.json | 1399 ++++++++- tests/update-fixtures.js | 3 + 10 files changed, 7455 insertions(+), 61 deletions(-) create mode 100644 tests/test-data-buffer-boundaries.json create mode 100644 tests/test-data-lookbehind-modifiers-group.json create mode 100644 tests/test-data-named-groups-unicode-set.json diff --git a/tests/test-data-buffer-boundaries.json b/tests/test-data-buffer-boundaries.json new file mode 100644 index 0000000..a585d07 --- /dev/null +++ b/tests/test-data-buffer-boundaries.json @@ -0,0 +1,2507 @@ +{ + "/\\A/": { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + "/\\A/u": { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + "/\\A/v": { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + "/\\z/": { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 0, + 2 + ], + "raw": "\\z" + }, + "/\\z/u": { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\z" + }, + "/\\z/v": { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\z" + }, + "/\\Z/": { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 0, + 2 + ], + "raw": "\\Z" + }, + "/\\Z/u": { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 0, + 2 + ], + "raw": "\\Z" + }, + "/\\Z/v": { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 0, + 2 + ], + "raw": "\\Z" + }, + "/\\A\\z/": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 2, + 4 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\A\\z" + }, + "/\\A\\z/u": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 2, + 4 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\A\\z" + }, + "/\\A\\z/v": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 2, + 4 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\A\\z" + }, + "/\\A\\Z/": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 2, + 4 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\A\\Z" + }, + "/\\A\\Z/u": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 2, + 4 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\A\\Z" + }, + "/\\A\\Z/v": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 2, + 4 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\A\\Z" + }, + "/\\A\\Z\\z/": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 2, + 4 + ], + "raw": "\\Z" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 4, + 6 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 6 + ], + "raw": "\\A\\Z\\z" + }, + "/\\A\\Z\\z/u": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 2, + 4 + ], + "raw": "\\Z" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 6 + ], + "raw": "\\A\\Z\\z" + }, + "/\\A\\Z\\z/v": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 2, + 4 + ], + "raw": "\\Z" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 6 + ], + "raw": "\\A\\Z\\z" + }, + "/\\Afoo\\z/": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 2, + 3 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 3, + 4 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 4, + 5 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 5, + 7 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "\\Afoo\\z" + }, + "/\\Afoo\\z/u": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 2, + 3 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 3, + 4 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 4, + 5 + ], + "raw": "o" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 5, + 7 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "\\Afoo\\z" + }, + "/\\Afoo\\z/v": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 2, + 3 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 3, + 4 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 4, + 5 + ], + "raw": "o" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 5, + 7 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "\\Afoo\\z" + }, + "/\\Afoo\\Z/": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 2, + 3 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 3, + 4 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 4, + 5 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 5, + 7 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "\\Afoo\\Z" + }, + "/\\Afoo\\Z/u": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 2, + 3 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 3, + 4 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 4, + 5 + ], + "raw": "o" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 5, + 7 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "\\Afoo\\Z" + }, + "/\\Afoo\\Z/v": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 2, + 3 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 3, + 4 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 4, + 5 + ], + "raw": "o" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 5, + 7 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "\\Afoo\\Z" + }, + "/\\A|\\z/": { + "type": "disjunction", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 3, + 5 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 5 + ], + "raw": "\\A|\\z" + }, + "/\\A|\\z/u": { + "type": "disjunction", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 3, + 5 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 5 + ], + "raw": "\\A|\\z" + }, + "/\\A|\\z/v": { + "type": "disjunction", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 3, + 5 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 5 + ], + "raw": "\\A|\\z" + }, + "/(\\A)/": { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 1, + 3 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 4 + ], + "raw": "(\\A)" + }, + "/(\\A)/u": { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 1, + 3 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 4 + ], + "raw": "(\\A)" + }, + "/(\\A)/v": { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 1, + 3 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 4 + ], + "raw": "(\\A)" + }, + "/(?=\\A)/": { + "type": "group", + "behavior": "lookahead", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 3, + 5 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 6 + ], + "raw": "(?=\\A)" + }, + "/(?=\\A)/u": { + "type": "group", + "behavior": "lookahead", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 3, + 5 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 6 + ], + "raw": "(?=\\A)" + }, + "/(?=\\A)/v": { + "type": "group", + "behavior": "lookahead", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 3, + 5 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 6 + ], + "raw": "(?=\\A)" + }, + "/\\A*/": { + "type": "quantifier", + "min": 0, + "max": null, + "greedy": true, + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + } + ], + "symbol": "*", + "range": [ + 0, + 3 + ], + "raw": "\\A*" + }, + "/\\A*/u": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 2\n \\A*\n ^", + "input": "\\A*" + }, + "/\\A*/v": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 2\n \\A*\n ^", + "input": "\\A*" + }, + "/\\z+/": { + "type": "quantifier", + "min": 1, + "max": null, + "greedy": true, + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 0, + 2 + ], + "raw": "\\z" + } + ], + "symbol": "+", + "range": [ + 0, + 3 + ], + "raw": "\\z+" + }, + "/\\z+/u": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 2\n \\z+\n ^", + "input": "\\z+" + }, + "/\\z+/v": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 2\n \\z+\n ^", + "input": "\\z+" + }, + "/\\Z{2}/": { + "type": "quantifier", + "min": 2, + "max": 2, + "greedy": true, + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 0, + 2 + ], + "raw": "\\Z" + } + ], + "symbol": null, + "range": [ + 0, + 5 + ], + "raw": "\\Z{2}" + }, + "/\\Z{2}/u": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 2\n \\Z{2}\n ^", + "input": "\\Z{2}" + }, + "/\\Z{2}/v": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 2\n \\Z{2}\n ^", + "input": "\\Z{2}" + }, + "/[\\A]/": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 1, + 3 + ], + "raw": "\\A" + } + ], + "negative": false, + "range": [ + 0, + 4 + ], + "raw": "[\\A]" + }, + "/[\\A]/u": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 2\n [\\A]\n ^", + "input": "[\\A]" + }, + "/[\\A]/v": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 1: \\A\n [\\A]\n ^", + "input": "[\\A]" + }, + "/[\\z\\Z]/": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 1, + 3 + ], + "raw": "\\z" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 3, + 5 + ], + "raw": "\\Z" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\z\\Z]" + }, + "/[\\z\\Z]/u": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 2\n [\\z\\Z]\n ^", + "input": "[\\z\\Z]" + }, + "/[\\z\\Z]/v": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 1: \\z\n [\\z\\Z]\n ^", + "input": "[\\z\\Z]" + }, + "/\\\\A/": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 92, + "range": [ + 0, + 2 + ], + "raw": "\\\\" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 65, + "range": [ + 2, + 3 + ], + "raw": "A" + } + ], + "range": [ + 0, + 3 + ], + "raw": "\\\\A" + }, + "/\\\\A/u": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 92, + "range": [ + 0, + 2 + ], + "raw": "\\\\" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 65, + "range": [ + 2, + 3 + ], + "raw": "A" + } + ], + "range": [ + 0, + 3 + ], + "raw": "\\\\A" + }, + "/\\\\A/v": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 92, + "range": [ + 0, + 2 + ], + "raw": "\\\\" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 65, + "range": [ + 2, + 3 + ], + "raw": "A" + } + ], + "range": [ + 0, + 3 + ], + "raw": "\\\\A" + }, + "/a\\Zb/": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 0, + 1 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 1, + 3 + ], + "raw": "\\Z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 3, + 4 + ], + "raw": "b" + } + ], + "range": [ + 0, + 4 + ], + "raw": "a\\Zb" + }, + "/a\\Zb/u": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 0, + 1 + ], + "raw": "a" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 1, + 3 + ], + "raw": "\\Z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 3, + 4 + ], + "raw": "b" + } + ], + "range": [ + 0, + 4 + ], + "raw": "a\\Zb" + }, + "/a\\Zb/v": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 0, + 1 + ], + "raw": "a" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 1, + 3 + ], + "raw": "\\Z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 3, + 4 + ], + "raw": "b" + } + ], + "range": [ + 0, + 4 + ], + "raw": "a\\Zb" + }, + "/(?i:\\A)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 4, + 6 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?i:\\A)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + }, + "/(?i:\\A)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?i:\\A)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + }, + "/(?i:\\A)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?i:\\A)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + }, + "/(?m:\\z)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 4, + 6 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?m:\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + }, + "/(?m:\\z)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?m:\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + }, + "/(?m:\\z)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?m:\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + }, + "/(?s:\\Z)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 4, + 6 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?s:\\Z)", + "modifierFlags": { + "enabling": "s", + "disabling": "" + } + }, + "/(?s:\\Z)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 4, + 6 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?s:\\Z)", + "modifierFlags": { + "enabling": "s", + "disabling": "" + } + }, + "/(?s:\\Z)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 4, + 6 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?s:\\Z)", + "modifierFlags": { + "enabling": "s", + "disabling": "" + } + }, + "/(?-i:\\A)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 5, + 7 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 8 + ], + "raw": "(?-i:\\A)", + "modifierFlags": { + "enabling": "", + "disabling": "i" + } + }, + "/(?-i:\\A)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 5, + 7 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 8 + ], + "raw": "(?-i:\\A)", + "modifierFlags": { + "enabling": "", + "disabling": "i" + } + }, + "/(?-i:\\A)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 5, + 7 + ], + "raw": "\\A" + } + ], + "range": [ + 0, + 8 + ], + "raw": "(?-i:\\A)", + "modifierFlags": { + "enabling": "", + "disabling": "i" + } + }, + "/(?-m:\\Z)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 5, + 7 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 8 + ], + "raw": "(?-m:\\Z)", + "modifierFlags": { + "enabling": "", + "disabling": "m" + } + }, + "/(?-m:\\Z)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 5, + 7 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 8 + ], + "raw": "(?-m:\\Z)", + "modifierFlags": { + "enabling": "", + "disabling": "m" + } + }, + "/(?-m:\\Z)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 5, + 7 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 8 + ], + "raw": "(?-m:\\Z)", + "modifierFlags": { + "enabling": "", + "disabling": "m" + } + }, + "/(?m-s:\\Afoo\\z)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 6, + 8 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 8, + 9 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 9, + 10 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 10, + 11 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 11, + 13 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 14 + ], + "raw": "(?m-s:\\Afoo\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "s" + } + }, + "/(?m-s:\\Afoo\\z)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 6, + 8 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 8, + 9 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 9, + 10 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 10, + 11 + ], + "raw": "o" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 11, + 13 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 14 + ], + "raw": "(?m-s:\\Afoo\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "s" + } + }, + "/(?m-s:\\Afoo\\z)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 6, + 8 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 102, + "range": [ + 8, + 9 + ], + "raw": "f" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 9, + 10 + ], + "raw": "o" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 111, + "range": [ + 10, + 11 + ], + "raw": "o" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 11, + 13 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 14 + ], + "raw": "(?m-s:\\Afoo\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "s" + } + }, + "/(?ims:a\\Zb)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 6, + 7 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 7, + 9 + ], + "raw": "\\Z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 9, + 10 + ], + "raw": "b" + } + ], + "range": [ + 0, + 11 + ], + "raw": "(?ims:a\\Zb)", + "modifierFlags": { + "enabling": "ims", + "disabling": "" + } + }, + "/(?ims:a\\Zb)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 6, + 7 + ], + "raw": "a" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 7, + 9 + ], + "raw": "\\Z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 9, + 10 + ], + "raw": "b" + } + ], + "range": [ + 0, + 11 + ], + "raw": "(?ims:a\\Zb)", + "modifierFlags": { + "enabling": "ims", + "disabling": "" + } + }, + "/(?ims:a\\Zb)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 6, + 7 + ], + "raw": "a" + }, + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 7, + 9 + ], + "raw": "\\Z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 9, + 10 + ], + "raw": "b" + } + ], + "range": [ + 0, + 11 + ], + "raw": "(?ims:a\\Zb)", + "modifierFlags": { + "enabling": "ims", + "disabling": "" + } + }, + "/(?i:\\A|\\z)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "disjunction", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 4, + 6 + ], + "raw": "\\A" + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 7, + 9 + ], + "raw": "\\z" + } + ], + "range": [ + 4, + 9 + ], + "raw": "\\A|\\z" + } + ], + "range": [ + 0, + 10 + ], + "raw": "(?i:\\A|\\z)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + }, + "/(?i:\\A|\\z)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "disjunction", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 7, + 9 + ], + "raw": "\\z" + } + ], + "range": [ + 4, + 9 + ], + "raw": "\\A|\\z" + } + ], + "range": [ + 0, + 10 + ], + "raw": "(?i:\\A|\\z)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + }, + "/(?i:\\A|\\z)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "disjunction", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 4, + 6 + ], + "raw": "\\A" + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 7, + 9 + ], + "raw": "\\z" + } + ], + "range": [ + 4, + 9 + ], + "raw": "\\A|\\z" + } + ], + "range": [ + 0, + 10 + ], + "raw": "(?i:\\A|\\z)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + }, + "/(?m:\\Z)+/": { + "type": "quantifier", + "min": 1, + "max": null, + "greedy": true, + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 4, + 6 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?m:\\Z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + } + ], + "symbol": "+", + "range": [ + 0, + 8 + ], + "raw": "(?m:\\Z)+" + }, + "/(?m:\\Z)+/u": { + "type": "quantifier", + "min": 1, + "max": null, + "greedy": true, + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 4, + 6 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?m:\\Z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + } + ], + "symbol": "+", + "range": [ + 0, + 8 + ], + "raw": "(?m:\\Z)+" + }, + "/(?m:\\Z)+/v": { + "type": "quantifier", + "min": 1, + "max": null, + "greedy": true, + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "end-buffer-optional-newline", + "range": [ + 4, + 6 + ], + "raw": "\\Z" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?m:\\Z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + } + ], + "symbol": "+", + "range": [ + 0, + 8 + ], + "raw": "(?m:\\Z)+" + }, + "/(?m:\\A*)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "quantifier", + "min": 0, + "max": null, + "greedy": true, + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 4, + 6 + ], + "raw": "\\A" + } + ], + "symbol": "*", + "range": [ + 4, + 7 + ], + "raw": "\\A*" + } + ], + "range": [ + 0, + 8 + ], + "raw": "(?m:\\A*)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + }, + "/(?m:\\A*)/u": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 6\n (?m:\\A*)\n ^", + "input": "(?m:\\A*)" + }, + "/(?m:\\A*)/v": { + "type": "error", + "name": "SyntaxError", + "message": "Expected atom at position 6\n (?m:\\A*)\n ^", + "input": "(?m:\\A*)" + }, + "/(?i:[\\z])/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 5, + 7 + ], + "raw": "\\z" + } + ], + "negative": false, + "range": [ + 4, + 8 + ], + "raw": "[\\z]" + } + ], + "range": [ + 0, + 9 + ], + "raw": "(?i:[\\z])", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + }, + "/(?i:[\\z])/u": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 6\n (?i:[\\z])\n ^", + "input": "(?i:[\\z])" + }, + "/(?i:[\\z])/v": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 5: \\z\n (?i:[\\z])\n ^", + "input": "(?i:[\\z])" + }, + "/(?m:(?-m:\\A)\\z)/": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 9, + 11 + ], + "raw": "\\A" + } + ], + "range": [ + 4, + 12 + ], + "raw": "(?-m:\\A)", + "modifierFlags": { + "enabling": "", + "disabling": "m" + } + }, + { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 12, + 14 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 15 + ], + "raw": "(?m:(?-m:\\A)\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + }, + "/(?m:(?-m:\\A)\\z)/u": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 9, + 11 + ], + "raw": "\\A" + } + ], + "range": [ + 4, + 12 + ], + "raw": "(?-m:\\A)", + "modifierFlags": { + "enabling": "", + "disabling": "m" + } + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 12, + 14 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 15 + ], + "raw": "(?m:(?-m:\\A)\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + }, + "/(?m:(?-m:\\A)\\z)/v": { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "anchor", + "kind": "start-buffer", + "range": [ + 9, + 11 + ], + "raw": "\\A" + } + ], + "range": [ + 4, + 12 + ], + "raw": "(?-m:\\A)", + "modifierFlags": { + "enabling": "", + "disabling": "m" + } + }, + { + "type": "anchor", + "kind": "end-buffer", + "range": [ + 12, + 14 + ], + "raw": "\\z" + } + ], + "range": [ + 0, + 15 + ], + "raw": "(?m:(?-m:\\A)\\z)", + "modifierFlags": { + "enabling": "m", + "disabling": "" + } + } +} diff --git a/tests/test-data-lookbehind-modifiers-group.json b/tests/test-data-lookbehind-modifiers-group.json new file mode 100644 index 0000000..1087709 --- /dev/null +++ b/tests/test-data-lookbehind-modifiers-group.json @@ -0,0 +1,192 @@ +{ + "^(?<=(?i:un))parse(?=(?i:able))$": { + "type": "alternative", + "body": [ + { + "type": "anchor", + "kind": "start", + "range": [ + 0, + 1 + ], + "raw": "^" + }, + { + "type": "group", + "behavior": "lookbehind", + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 117, + "range": [ + 9, + 10 + ], + "raw": "u" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 110, + "range": [ + 10, + 11 + ], + "raw": "n" + } + ], + "range": [ + 5, + 12 + ], + "raw": "(?i:un)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + } + ], + "range": [ + 1, + 13 + ], + "raw": "(?<=(?i:un))" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 112, + "range": [ + 13, + 14 + ], + "raw": "p" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 14, + 15 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 114, + "range": [ + 15, + 16 + ], + "raw": "r" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 115, + "range": [ + 16, + 17 + ], + "raw": "s" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 101, + "range": [ + 17, + 18 + ], + "raw": "e" + }, + { + "type": "group", + "behavior": "lookahead", + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 25, + 26 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 26, + 27 + ], + "raw": "b" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 108, + "range": [ + 27, + 28 + ], + "raw": "l" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 101, + "range": [ + 28, + 29 + ], + "raw": "e" + } + ], + "range": [ + 21, + 30 + ], + "raw": "(?i:able)", + "modifierFlags": { + "enabling": "i", + "disabling": "" + } + } + ], + "range": [ + 18, + 31 + ], + "raw": "(?=(?i:able))" + }, + { + "type": "anchor", + "kind": "end", + "range": [ + 31, + 32 + ], + "raw": "$" + } + ], + "range": [ + 0, + 32 + ], + "raw": "^(?<=(?i:un))parse(?=(?i:able))$" + } +} diff --git a/tests/test-data-lookbehind.json b/tests/test-data-lookbehind.json index 0ed70a9..8315143 100644 --- a/tests/test-data-lookbehind.json +++ b/tests/test-data-lookbehind.json @@ -355,10 +355,14 @@ "raw": "(?)\\k": { + "type": "alternative", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 0, + 6 + ], + "raw": "(?)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 3, + 4 + ], + "raw": "a" + } + }, + { + "type": "reference", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 9, + 10 + ], + "raw": "a" + }, + "range": [ + 6, + 11 + ], + "raw": "\\k" + } + ], + "range": [ + 0, + 11 + ], + "raw": "(?)\\k" + }, + "(?)[\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 7: \\k\n (?)[\\k]\n ^", + "input": "(?)[\\k]" + }, + "(?)[\\q{a}\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 12: \\k\n )[\\q{a}\\k]\n ^", + "input": "(?)[\\q{a}\\k]" + }, + "(?)[a-\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 10: \\k\n (?)[a-\\k]\n ^", + "input": "(?)[a-\\k]" + }, + "(?)[\\k&&a]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 7: \\k\n (?)[\\k&&a]\n ^", + "input": "(?)[\\k&&a]" + }, + "[\\k](?)": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 1: \\k\n [\\k](?](?)" + }, + "\\k": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named capture referenced at position 3: a\n \\k\n ^", + "input": "\\k" + } +} diff --git a/tests/test-data-named-groups-unicode.json b/tests/test-data-named-groups-unicode.json index b656dac..20a0e93 100644 --- a/tests/test-data-named-groups-unicode.json +++ b/tests/test-data-named-groups-unicode.json @@ -130,5 +130,129 @@ ], "raw": "\\u{2EBF0}\\u{200C}\\u{200D}" } + }, + "(?.)[\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 9\n (?.)[\\k]\n ^", + "input": "(?.)[\\k]" + }, + "(?.)\\k": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named capture referenced at position 10: b\n (?.)\\k\n ^", + "input": "(?.)\\k" + }, + "(?(?x))": { + "type": "error", + "name": "SyntaxError", + "message": "Duplicate capture group name at position 8: a\n (?(?x))\n ^", + "input": "(?(?x))" + }, + "(?x)|(?y)": { + "type": "disjunction", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 120, + "range": [ + 5, + 6 + ], + "raw": "x" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?x)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 3, + 4 + ], + "raw": "a" + } + }, + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 121, + "range": [ + 13, + 14 + ], + "raw": "y" + } + ], + "range": [ + 8, + 15 + ], + "raw": "(?y)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 11, + 12 + ], + "raw": "a" + } + } + ], + "range": [ + 0, + 15 + ], + "raw": "(?x)|(?y)" + }, + "\\k": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named reference at position 1\n \\k\n ^", + "input": "\\k" + }, + "\\k)[\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 8\n (?)[\\k]\n ^", + "input": "(?)[\\k]" + }, + "[\\k](?)": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 2\n [\\k](?\n ^", + "input": "[\\k](?)" + }, + "(?)[a\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 9\n (?)[a\\k]\n ^", + "input": "(?)[a\\k]" + }, + "(?)[\\k-b]": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 8\n (?)[\\k-b]\n ^", + "input": "(?)[\\k-b]" } } diff --git a/tests/test-data-named-groups.json b/tests/test-data-named-groups.json index 992e385..a9096b4 100644 --- a/tests/test-data-named-groups.json +++ b/tests/test-data-named-groups.json @@ -716,5 +716,926 @@ 3 ], "raw": "(a)" + }, + "\\k": { + "type": "value", + "kind": "identifier", + "codePoint": 107, + "range": [ + 0, + 2 + ], + "raw": "\\k" + }, + "\\k": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 107, + "range": [ + 0, + 2 + ], + "raw": "\\k" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 60, + "range": [ + 2, + 3 + ], + "raw": "<" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 3, + 4 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 62, + "range": [ + 4, + 5 + ], + "raw": ">" + } + ], + "range": [ + 0, + 5 + ], + "raw": "\\k" + }, + "\\k.)\\k": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named reference at position 8\n (?.)\\k\n ^", + "input": "(?.)\\k" + }, + "(?.)\\k.)\\k.)\\k(?.)": { + "type": "alternative", + "body": [ + { + "type": "reference", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 3, + 4 + ], + "raw": "a" + }, + "range": [ + 0, + 5 + ], + "raw": "\\k" + }, + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "dot", + "range": [ + 10, + 11 + ], + "raw": "." + } + ], + "range": [ + 5, + 12 + ], + "raw": "(?.)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 8, + 9 + ], + "raw": "a" + } + } + ], + "range": [ + 0, + 12 + ], + "raw": "\\k(?.)" + }, + "[\\k]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 107, + "range": [ + 1, + 3 + ], + "raw": "\\k" + } + ], + "negative": false, + "range": [ + 0, + 4 + ], + "raw": "[\\k]" + }, + "(?.)[\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 9\n (?.)[\\k]\n ^", + "input": "(?.)[\\k]" + }, + "[\\k](?.)": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 2\n [\\k](?.)\n ^", + "input": "[\\k](?.)" + }, + "(?.)[\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 9\n (?.)[\\k]\n ^", + "input": "(?.)[\\k]" + }, + "(?.)\\k": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named capture referenced at position 10: b\n (?.)\\k\n ^", + "input": "(?.)\\k" + }, + "\\k(?x)": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named capture referenced at position 3: a\n \\k(?x)\n ^", + "input": "\\k(?x)" + }, + "(?a)(?b)(?a)": { + "type": "error", + "name": "SyntaxError", + "message": "Duplicate capture group name at position 17: a\n (?b)(?a)\n ^", + "input": "(?a)(?b)(?a)" + }, + "(?(?x))": { + "type": "error", + "name": "SyntaxError", + "message": "Duplicate capture group name at position 8: a\n (?(?x))\n ^", + "input": "(?(?x))" + }, + "(?x)(?:(?y)|z)": { + "type": "error", + "name": "SyntaxError", + "message": "Duplicate capture group name at position 13: a\n a>x)(?:(?y)|z)\n ^", + "input": "(?x)(?:(?y)|z)" + }, + "(?:(?x)|y)(?:(?z)|w)": { + "type": "error", + "name": "SyntaxError", + "message": "Duplicate capture group name at position 19: a\n )|y)(?:(?z)|w)\n ^", + "input": "(?:(?x)|y)(?:(?z)|w)" + }, + "(?<\\u0061>x)(?y)": { + "type": "error", + "name": "SyntaxError", + "message": "Duplicate capture group name at position 15: a\n 0061>x)(?y)\n ^", + "input": "(?<\\u0061>x)(?y)" + }, + "(?x)|(?y)": { + "type": "disjunction", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 120, + "range": [ + 5, + 6 + ], + "raw": "x" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?x)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 3, + 4 + ], + "raw": "a" + } + }, + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 121, + "range": [ + 13, + 14 + ], + "raw": "y" + } + ], + "range": [ + 8, + 15 + ], + "raw": "(?y)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 11, + 12 + ], + "raw": "a" + } + } + ], + "range": [ + 0, + 15 + ], + "raw": "(?x)|(?y)" + }, + "(?:(?x)|(?y))\\k": { + "type": "alternative", + "body": [ + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "disjunction", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 120, + "range": [ + 8, + 9 + ], + "raw": "x" + } + ], + "range": [ + 3, + 10 + ], + "raw": "(?x)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 6, + 7 + ], + "raw": "a" + } + }, + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 121, + "range": [ + 16, + 17 + ], + "raw": "y" + } + ], + "range": [ + 11, + 18 + ], + "raw": "(?y)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 14, + 15 + ], + "raw": "a" + } + } + ], + "range": [ + 3, + 18 + ], + "raw": "(?x)|(?y)" + } + ], + "range": [ + 0, + 19 + ], + "raw": "(?:(?x)|(?y))" + }, + { + "type": "reference", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 22, + 23 + ], + "raw": "a" + }, + "range": [ + 19, + 24 + ], + "raw": "\\k" + } + ], + "range": [ + 0, + 24 + ], + "raw": "(?:(?x)|(?y))\\k" + }, + "(?x)|(?:(?y)|(?z))": { + "type": "disjunction", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 120, + "range": [ + 5, + 6 + ], + "raw": "x" + } + ], + "range": [ + 0, + 7 + ], + "raw": "(?x)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 3, + 4 + ], + "raw": "a" + } + }, + { + "type": "group", + "behavior": "ignore", + "body": [ + { + "type": "disjunction", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 121, + "range": [ + 16, + 17 + ], + "raw": "y" + } + ], + "range": [ + 11, + 18 + ], + "raw": "(?y)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 14, + 15 + ], + "raw": "a" + } + }, + { + "type": "group", + "behavior": "normal", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 122, + "range": [ + 24, + 25 + ], + "raw": "z" + } + ], + "range": [ + 19, + 26 + ], + "raw": "(?z)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 22, + 23 + ], + "raw": "a" + } + } + ], + "range": [ + 11, + 26 + ], + "raw": "(?y)|(?z)" + } + ], + "range": [ + 8, + 27 + ], + "raw": "(?:(?y)|(?z))" + } + ], + "range": [ + 0, + 27 + ], + "raw": "(?x)|(?:(?y)|(?z))" + }, + "(?.)\\kx": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named reference at position 8\n (?.)\\kx\n ^", + "input": "(?.)\\kx" + }, + "(?.)\\k.)\\k.)\\k)\\k": { + "type": "alternative", + "body": [ + { + "type": "reference", + "matchIndex": 2, + "range": [ + 0, + 2 + ], + "raw": "\\2" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 2, + 4 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 4, + 10 + ], + "raw": "(?)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 7, + 8 + ], + "raw": "a" + } + }, + { + "type": "reference", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 13, + 14 + ], + "raw": "a" + }, + "range": [ + 10, + 15 + ], + "raw": "\\k" + } + ], + "range": [ + 0, + 15 + ], + "raw": "\\2()(?)\\k" + }, + "\\2()(?)(?)": { + "type": "error", + "name": "SyntaxError", + "message": "Duplicate capture group name at position 13: a\n )(?)(?)\n ^", + "input": "\\2()(?)(?)" + }, + "\\2()(?)\\k": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid named capture referenced at position 13: b\n )(?)\\k\n ^", + "input": "\\2()(?)\\k" + }, + "\\8(?)\\k": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 56, + "range": [ + 0, + 2 + ], + "raw": "\\8" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 2, + 8 + ], + "raw": "(?)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 5, + 6 + ], + "raw": "a" + } + }, + { + "type": "reference", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 11, + 12 + ], + "raw": "a" + }, + "range": [ + 8, + 13 + ], + "raw": "\\k" + } + ], + "range": [ + 0, + 13 + ], + "raw": "\\8(?)\\k" + }, + "\\k\\2()(?)|(?)": { + "type": "disjunction", + "body": [ + { + "type": "alternative", + "body": [ + { + "type": "reference", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 3, + 4 + ], + "raw": "a" + }, + "range": [ + 0, + 5 + ], + "raw": "\\k" + }, + { + "type": "reference", + "matchIndex": 2, + "range": [ + 5, + 7 + ], + "raw": "\\2" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 7, + 9 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 9, + 15 + ], + "raw": "(?)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 12, + 13 + ], + "raw": "a" + } + } + ], + "range": [ + 0, + 15 + ], + "raw": "\\k\\2()(?)" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 16, + 22 + ], + "raw": "(?)", + "name": { + "type": "identifier", + "value": "a", + "range": [ + 19, + 20 + ], + "raw": "a" + } + } + ], + "range": [ + 0, + 22 + ], + "raw": "\\k\\2()(?)|(?)" + }, + "(?)[\\k]": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 8\n (?)[\\k]\n ^", + "input": "(?)[\\k]" + }, + "[\\k](?)": { + "type": "error", + "name": "SyntaxError", + "message": "classEscape at position 2\n [\\k](?\n ^", + "input": "[\\k](?)" + }, + "[\\k]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 107, + "range": [ + 1, + 3 + ], + "raw": "\\k" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 60, + "range": [ + 3, + 4 + ], + "raw": "<" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 62, + "range": [ + 5, + 6 + ], + "raw": ">" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\k]" + }, + "[\\k-b]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 107, + "range": [ + 1, + 3 + ], + "raw": "\\k" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 60, + "range": [ + 3, + 4 + ], + "raw": "<" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "symbol", + "codePoint": 62, + "range": [ + 5, + 6 + ], + "raw": ">" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 7, + 8 + ], + "raw": "b" + }, + "range": [ + 5, + 8 + ], + "raw": ">-b" + } + ], + "negative": false, + "range": [ + 0, + 9 + ], + "raw": "[\\k-b]" } } diff --git a/tests/test-data-unicode-set.json b/tests/test-data-unicode-set.json index 095633d..d6e1e11 100644 --- a/tests/test-data-unicode-set.json +++ b/tests/test-data-unicode-set.json @@ -818,7 +818,7 @@ "[a-z&&p-s]": { "type": "error", "name": "SyntaxError", - "message": "character at position 7: &\n [a-z&&p-s]\n ^", + "message": "Invalid set operation in character class at position 6\n [a-z&&p-s]\n ^", "input": "[a-z&&p-s]" }, "[[a-z]&&[p-s]]": { @@ -1377,56 +1377,10 @@ "raw": "[[b-d]--\\q{a|b|c}]" }, "[^\\q{AB}]": { - "type": "characterClass", - "kind": "union", - "body": [ - { - "type": "classStrings", - "strings": [ - { - "type": "classString", - "characters": [ - { - "type": "value", - "kind": "symbol", - "codePoint": 65, - "range": [ - 5, - 6 - ], - "raw": "A" - }, - { - "type": "value", - "kind": "symbol", - "codePoint": 66, - "range": [ - 6, - 7 - ], - "raw": "B" - } - ], - "range": [ - 5, - 7 - ], - "raw": "AB" - } - ], - "range": [ - 2, - 8 - ], - "raw": "\\q{AB}" - } - ], - "negative": true, - "range": [ - 0, - 9 - ], - "raw": "[^\\q{AB}]" + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{AB}]\n ^", + "input": "[^\\q{AB}]" }, "\\1": { "type": "error", @@ -1633,5 +1587,2090 @@ "name": "SyntaxError", "message": "atomEscape at position 1\n \\q{a}\n ^", "input": "\\q{a}" + }, + "[\\q{\\0}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 4, + 6 + ], + "raw": "\\0" + } + ], + "range": [ + 4, + 6 + ], + "raw": "\\0" + } + ], + "range": [ + 1, + 7 + ], + "raw": "\\q{\\0}" + } + ], + "negative": false, + "range": [ + 0, + 8 + ], + "raw": "[\\q{\\0}]" + }, + "[\\q{a\\0b|\\0x|y}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 5, + 7 + ], + "raw": "\\0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 7, + 8 + ], + "raw": "b" + } + ], + "range": [ + 4, + 8 + ], + "raw": "a\\0b" + }, + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 9, + 11 + ], + "raw": "\\0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 120, + "range": [ + 11, + 12 + ], + "raw": "x" + } + ], + "range": [ + 9, + 12 + ], + "raw": "\\0x" + }, + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 121, + "range": [ + 13, + 14 + ], + "raw": "y" + } + ], + "range": [ + 13, + 14 + ], + "raw": "y" + } + ], + "range": [ + 1, + 15 + ], + "raw": "\\q{a\\0b|\\0x|y}" + } + ], + "negative": false, + "range": [ + 0, + 16 + ], + "raw": "[\\q{a\\0b|\\0x|y}]" + }, + "[\\q{\\01}]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 5: \\0\n [\\q{\\01}]\n ^", + "input": "[\\q{\\01}]" + }, + "[\\0-\\0]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 1, + 3 + ], + "raw": "\\0" + }, + "max": { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 4, + 6 + ], + "raw": "\\0" + }, + "range": [ + 1, + 6 + ], + "raw": "\\0-\\0" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\0-\\0]" + }, + "[\\x00-\\0]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "hexadecimalEscape", + "codePoint": 0, + "range": [ + 1, + 5 + ], + "raw": "\\x00" + }, + "max": { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 6, + 8 + ], + "raw": "\\0" + }, + "range": [ + 1, + 8 + ], + "raw": "\\x00-\\0" + } + ], + "negative": false, + "range": [ + 0, + 9 + ], + "raw": "[\\x00-\\0]" + }, + "[a-z&&b]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid set operation in character class at position 6\n [a-z&&b]\n ^", + "input": "[a-z&&b]" + }, + "[a-z--b]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 4: -\n [a-z--b]\n ^", + "input": "[a-z--b]" + }, + "[a-z&&[b]]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid set operation in character class at position 6\n [a-z&&[b]]\n ^", + "input": "[a-z&&[b]]" + }, + "[a-z\\q{b}&&c]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid set operation in character class at position 11\n a-z\\q{b}&&c]\n ^", + "input": "[a-z\\q{b}&&c]" + }, + "[a-zb]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 1, + 2 + ], + "raw": "a" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 122, + "range": [ + 3, + 4 + ], + "raw": "z" + }, + "range": [ + 1, + 4 + ], + "raw": "a-z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 4, + 5 + ], + "raw": "b" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[a-zb]" + }, + "[\\:-\\xFF]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "identifier", + "codePoint": 58, + "range": [ + 2, + 3 + ], + "raw": ":" + }, + "max": { + "type": "value", + "kind": "hexadecimalEscape", + "codePoint": 255, + "range": [ + 4, + 8 + ], + "raw": "\\xFF" + }, + "range": [ + 1, + 8 + ], + "raw": "\\:-\\xFF" + } + ], + "negative": false, + "range": [ + 0, + 9 + ], + "raw": "[\\:-\\xFF]" + }, + "[\\<-^]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "identifier", + "codePoint": 60, + "range": [ + 2, + 3 + ], + "raw": "<" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 94, + "range": [ + 4, + 5 + ], + "raw": "^" + }, + "range": [ + 1, + 5 + ], + "raw": "\\<-^" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\<-^]" + }, + "[\\&-\\~]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "identifier", + "codePoint": 38, + "range": [ + 2, + 3 + ], + "raw": "&" + }, + "max": { + "type": "value", + "kind": "identifier", + "codePoint": 126, + "range": [ + 5, + 6 + ], + "raw": "~" + }, + "range": [ + 1, + 6 + ], + "raw": "\\&-\\~" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\&-\\~]" + }, + "[\\~-\\&]": { + "type": "error", + "name": "SyntaxError", + "message": "invalid range in character class at position 1: ~-&\n [\\~-\\&]\n ^", + "input": "[\\~-\\&]" + }, + "[\\:--a]": { + "type": "characterClass", + "kind": "subtraction", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 58, + "range": [ + 2, + 3 + ], + "raw": ":" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\:--a]" + }, + "[\\:&&a]": { + "type": "characterClass", + "kind": "intersection", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 58, + "range": [ + 2, + 3 + ], + "raw": ":" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\:&&a]" + }, + "[\\:-]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid range end at position 4: ]\n [\\:-]\n ^", + "input": "[\\:-]" + }, + "[a&]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 1, + 2 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 38, + "range": [ + 2, + 3 + ], + "raw": "&" + } + ], + "negative": false, + "range": [ + 0, + 4 + ], + "raw": "[a&]" + }, + "[a&b]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 1, + 2 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 38, + "range": [ + 2, + 3 + ], + "raw": "&" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 3, + 4 + ], + "raw": "b" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[a&b]" + }, + "[\\:&]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 58, + "range": [ + 2, + 3 + ], + "raw": ":" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 38, + "range": [ + 3, + 4 + ], + "raw": "&" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\:&]" + }, + "[[a]&b]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 2, + 3 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 1, + 4 + ], + "raw": "[a]" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 38, + "range": [ + 4, + 5 + ], + "raw": "&" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 5, + 6 + ], + "raw": "b" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[[a]&b]" + }, + "[\\d&]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassEscape", + "value": "d", + "range": [ + 1, + 3 + ], + "raw": "\\d" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 38, + "range": [ + 3, + 4 + ], + "raw": "&" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\d&]" + }, + "[a-z&]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 1, + 2 + ], + "raw": "a" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 122, + "range": [ + 3, + 4 + ], + "raw": "z" + }, + "range": [ + 1, + 4 + ], + "raw": "a-z" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 38, + "range": [ + 4, + 5 + ], + "raw": "&" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[a-z&]" + }, + "[\\q{ab}&]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 5, + 6 + ], + "raw": "b" + } + ], + "range": [ + 4, + 6 + ], + "raw": "ab" + } + ], + "range": [ + 1, + 7 + ], + "raw": "\\q{ab}" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 38, + "range": [ + 7, + 8 + ], + "raw": "&" + } + ], + "negative": false, + "range": [ + 0, + 9 + ], + "raw": "[\\q{ab}&]" + }, + "[a&&b]": { + "type": "characterClass", + "kind": "intersection", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 1, + 2 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 4, + 5 + ], + "raw": "b" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[a&&b]" + }, + "[a&&&b]": { + "type": "error", + "name": "SyntaxError", + "message": "&& cannot be followed by &. Wrap it in brackets: &&[&]. at position 4\n [a&&&b]\n ^", + "input": "[a&&&b]" + }, + "[&&a]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid set operation in character class at position 3\n [&&a]\n ^", + "input": "[&&a]" + }, + "[a&&]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 4: ]\n [a&&]\n ^", + "input": "[a&&]" + }, + "[[a]-b]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 4: -\n [[a]-b]\n ^", + "input": "[[a]-b]" + }, + "[\\q{a}-b]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 6: -\n [\\q{a}-b]\n ^", + "input": "[\\q{a}-b]" + }, + "[[a]-]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 4: -\n [[a]-]\n ^", + "input": "[[a]-]" + }, + "[[a]--b]": { + "type": "characterClass", + "kind": "subtraction", + "body": [ + { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 2, + 3 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 1, + 4 + ], + "raw": "[a]" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 6, + 7 + ], + "raw": "b" + } + ], + "negative": false, + "range": [ + 0, + 8 + ], + "raw": "[[a]--b]" + }, + "[\\d-a]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 3: -\n [\\d-a]\n ^", + "input": "[\\d-a]" + }, + "[\\D-\\d]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 3: -\n [\\D-\\d]\n ^", + "input": "[\\D-\\d]" + }, + "[\\w-\\:]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 3: -\n [\\w-\\:]\n ^", + "input": "[\\w-\\:]" + }, + "[\\s-a]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 3: -\n [\\s-a]\n ^", + "input": "[\\s-a]" + }, + "[\\p{L}-a]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 6: -\n [\\p{L}-a]\n ^", + "input": "[\\p{L}-a]" + }, + "[\\P{L}-\\xFF]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 6: -\n [\\P{L}-\\xFF]\n ^", + "input": "[\\P{L}-\\xFF]" + }, + "[\\d-]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid character at position 3: -\n [\\d-]\n ^", + "input": "[\\d-]" + }, + "[a-\\d]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid escape at position 4: \\d\n [a-\\d]\n ^", + "input": "[a-\\d]" + }, + "[\\d--a]": { + "type": "characterClass", + "kind": "subtraction", + "body": [ + { + "type": "characterClassEscape", + "value": "d", + "range": [ + 1, + 3 + ], + "raw": "\\d" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\d--a]" + }, + "[\\d&&a]": { + "type": "characterClass", + "kind": "intersection", + "body": [ + { + "type": "characterClassEscape", + "value": "d", + "range": [ + 1, + 3 + ], + "raw": "\\d" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\d&&a]" + }, + "[\\p{L}--\\q{a}]": { + "type": "characterClass", + "kind": "subtraction", + "body": [ + { + "type": "unicodePropertyEscape", + "negative": false, + "value": "L", + "range": [ + 1, + 6 + ], + "raw": "\\p{L}" + }, + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 11, + 12 + ], + "raw": "a" + } + ], + "range": [ + 11, + 12 + ], + "raw": "a" + } + ], + "range": [ + 8, + 13 + ], + "raw": "\\q{a}" + } + ], + "negative": false, + "range": [ + 0, + 14 + ], + "raw": "[\\p{L}--\\q{a}]" + }, + "[\\da]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassEscape", + "value": "d", + "range": [ + 1, + 3 + ], + "raw": "\\d" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 3, + 4 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\da]" + }, + "[\\d\\p{L}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassEscape", + "value": "d", + "range": [ + 1, + 3 + ], + "raw": "\\d" + }, + { + "type": "unicodePropertyEscape", + "negative": false, + "value": "L", + "range": [ + 3, + 8 + ], + "raw": "\\p{L}" + } + ], + "negative": false, + "range": [ + 0, + 9 + ], + "raw": "[\\d\\p{L}]" + }, + "[\\b-a]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "singleEscape", + "codePoint": 8, + "range": [ + 1, + 3 + ], + "raw": "\\b" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + "range": [ + 1, + 5 + ], + "raw": "\\b-a" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\b-a]" + }, + "[\\0-a]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 1, + 3 + ], + "raw": "\\0" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + "range": [ + 1, + 5 + ], + "raw": "\\0-a" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\0-a]" + }, + "[\\--a]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "singleEscape", + "codePoint": 45, + "range": [ + 1, + 3 + ], + "raw": "\\-" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + "range": [ + 1, + 5 + ], + "raw": "\\--a" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\--a]" + }, + "[\\n-\\r]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "singleEscape", + "codePoint": 10, + "range": [ + 1, + 3 + ], + "raw": "\\n" + }, + "max": { + "type": "value", + "kind": "singleEscape", + "codePoint": 13, + "range": [ + 4, + 6 + ], + "raw": "\\r" + }, + "range": [ + 1, + 6 + ], + "raw": "\\n-\\r" + } + ], + "negative": false, + "range": [ + 0, + 7 + ], + "raw": "[\\n-\\r]" + }, + "[\\x20-\\xFF]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "hexadecimalEscape", + "codePoint": 32, + "range": [ + 1, + 5 + ], + "raw": "\\x20" + }, + "max": { + "type": "value", + "kind": "hexadecimalEscape", + "codePoint": 255, + "range": [ + 6, + 10 + ], + "raw": "\\xFF" + }, + "range": [ + 1, + 10 + ], + "raw": "\\x20-\\xFF" + } + ], + "negative": false, + "range": [ + 0, + 11 + ], + "raw": "[\\x20-\\xFF]" + }, + "[^\\q{}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{}]\n ^", + "input": "[^\\q{}]" + }, + "[^\\q{ab}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{ab}]\n ^", + "input": "[^\\q{ab}]" + }, + "[^\\q{a|bc}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{a|bc}]\n ^", + "input": "[^\\q{a|bc}]" + }, + "[^[\\q{ab}]]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^[\\q{ab}]]\n ^", + "input": "[^[\\q{ab}]]" + }, + "[^[^\\q{ab}]]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 2\n [^[^\\q{ab}]]\n ^", + "input": "[^[^\\q{ab}]]" + }, + "[^\\q{a}\\q{bc}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{a}\\q{bc}]\n ^", + "input": "[^\\q{a}\\q{bc}]" + }, + "[^a-z\\q{bc}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^a-z\\q{bc}]\n ^", + "input": "[^a-z\\q{bc}]" + }, + "[^\\q{ab}&&\\q{ab}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{ab}&&\\q{ab}]\n ^", + "input": "[^\\q{ab}&&\\q{ab}]" + }, + "[^\\q{ab}--a]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{ab}--a]\n ^", + "input": "[^\\q{ab}--a]" + }, + "[^[\\q{ab}]--a]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^[\\q{ab}]--a]\n ^", + "input": "[^[\\q{ab}]--a]" + }, + "[^\\q{ab}--\\q{ab}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{ab}--\\q{ab}]\n ^", + "input": "[^\\q{ab}--\\q{ab}]" + }, + "[^\\p{RGI_Emoji}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\p{RGI_Emoji}]\n ^", + "input": "[^\\p{RGI_Emoji}]" + }, + "[^\\p{Basic_Emoji}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\p{Basic_Emoji}]\n ^", + "input": "[^\\p{Basic_Emoji}]" + }, + "[^\\q{ab}&&\\p{RGI_Emoji}]": { + "type": "error", + "name": "SyntaxError", + "message": "Negated character class may contain strings at position 0\n [^\\q{ab}&&\\p{RGI_Emoji}]\n ^", + "input": "[^\\q{ab}&&\\p{RGI_Emoji}]" + }, + "[^\\q{a}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + } + ], + "range": [ + 5, + 6 + ], + "raw": "a" + } + ], + "range": [ + 2, + 7 + ], + "raw": "\\q{a}" + } + ], + "negative": true, + "range": [ + 0, + 8 + ], + "raw": "[^\\q{a}]" + }, + "[^\\q{a|b}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + } + ], + "range": [ + 5, + 6 + ], + "raw": "a" + }, + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 7, + 8 + ], + "raw": "b" + } + ], + "range": [ + 7, + 8 + ], + "raw": "b" + } + ], + "range": [ + 2, + 9 + ], + "raw": "\\q{a|b}" + } + ], + "negative": true, + "range": [ + 0, + 10 + ], + "raw": "[^\\q{a|b}]" + }, + "[^\\q{\\u{1F600}}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "unicodeCodePointEscape", + "codePoint": 128512, + "range": [ + 5, + 14 + ], + "raw": "\\u{1F600}" + } + ], + "range": [ + 5, + 14 + ], + "raw": "\\u{1F600}" + } + ], + "range": [ + 2, + 15 + ], + "raw": "\\q{\\u{1F600}}" + } + ], + "negative": true, + "range": [ + 0, + 16 + ], + "raw": "[^\\q{\\u{1F600}}]" + }, + "[^\\q{ab}&&a]": { + "type": "characterClass", + "kind": "intersection", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 6, + 7 + ], + "raw": "b" + } + ], + "range": [ + 5, + 7 + ], + "raw": "ab" + } + ], + "range": [ + 2, + 8 + ], + "raw": "\\q{ab}" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 10, + 11 + ], + "raw": "a" + } + ], + "negative": true, + "range": [ + 0, + 12 + ], + "raw": "[^\\q{ab}&&a]" + }, + "[^a--\\q{ab}]": { + "type": "characterClass", + "kind": "subtraction", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 2, + 3 + ], + "raw": "a" + }, + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 8, + 9 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 9, + 10 + ], + "raw": "b" + } + ], + "range": [ + 8, + 10 + ], + "raw": "ab" + } + ], + "range": [ + 5, + 11 + ], + "raw": "\\q{ab}" + } + ], + "negative": true, + "range": [ + 0, + 12 + ], + "raw": "[^a--\\q{ab}]" + }, + "[^\\q{ab}&&\\q{ab}&&a]": { + "type": "characterClass", + "kind": "intersection", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 5, + 6 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 6, + 7 + ], + "raw": "b" + } + ], + "range": [ + 5, + 7 + ], + "raw": "ab" + } + ], + "range": [ + 2, + 8 + ], + "raw": "\\q{ab}" + }, + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 13, + 14 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 14, + 15 + ], + "raw": "b" + } + ], + "range": [ + 13, + 15 + ], + "raw": "ab" + } + ], + "range": [ + 10, + 16 + ], + "raw": "\\q{ab}" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 18, + 19 + ], + "raw": "a" + } + ], + "negative": true, + "range": [ + 0, + 20 + ], + "raw": "[^\\q{ab}&&\\q{ab}&&a]" + }, + "[^[\\q{ab}&&a]]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClass", + "kind": "intersection", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 6, + 7 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 7, + 8 + ], + "raw": "b" + } + ], + "range": [ + 6, + 8 + ], + "raw": "ab" + } + ], + "range": [ + 3, + 9 + ], + "raw": "\\q{ab}" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 11, + 12 + ], + "raw": "a" + } + ], + "negative": false, + "range": [ + 2, + 13 + ], + "raw": "[\\q{ab}&&a]" + } + ], + "negative": true, + "range": [ + 0, + 14 + ], + "raw": "[^[\\q{ab}&&a]]" + }, + "[^\\p{L}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "unicodePropertyEscape", + "negative": false, + "value": "L", + "range": [ + 2, + 7 + ], + "raw": "\\p{L}" + } + ], + "negative": true, + "range": [ + 0, + 8 + ], + "raw": "[^\\p{L}]" + }, + "[^[^a]]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + } + ], + "negative": true, + "range": [ + 2, + 6 + ], + "raw": "[^a]" + } + ], + "negative": true, + "range": [ + 0, + 7 + ], + "raw": "[^[^a]]" + }, + "[\\q{ab}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 4, + 5 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 5, + 6 + ], + "raw": "b" + } + ], + "range": [ + 4, + 6 + ], + "raw": "ab" + } + ], + "range": [ + 1, + 7 + ], + "raw": "\\q{ab}" + } + ], + "negative": false, + "range": [ + 0, + 8 + ], + "raw": "[\\q{ab}]" + }, + "[[^a]\\q{ab}]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 3, + 4 + ], + "raw": "a" + } + ], + "negative": true, + "range": [ + 1, + 5 + ], + "raw": "[^a]" + }, + { + "type": "classStrings", + "strings": [ + { + "type": "classString", + "characters": [ + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 8, + 9 + ], + "raw": "a" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 98, + "range": [ + 9, + 10 + ], + "raw": "b" + } + ], + "range": [ + 8, + 10 + ], + "raw": "ab" + } + ], + "range": [ + 5, + 11 + ], + "raw": "\\q{ab}" + } + ], + "negative": false, + "range": [ + 0, + 12 + ], + "raw": "[[^a]\\q{ab}]" + }, + "[\\B]": { + "type": "error", + "name": "SyntaxError", + "message": "\\B not possible inside of CharacterClass at position 2\n [\\B]\n ^", + "input": "[\\B]" + }, + "\\A": { + "type": "error", + "name": "SyntaxError", + "message": "atomEscape at position 1\n \\A\n ^", + "input": "\\A" + }, + "\\z": { + "type": "error", + "name": "SyntaxError", + "message": "atomEscape at position 1\n \\z\n ^", + "input": "\\z" + }, + "\\Z": { + "type": "error", + "name": "SyntaxError", + "message": "atomEscape at position 1\n \\Z\n ^", + "input": "\\Z" } } diff --git a/tests/test-data-unicode.json b/tests/test-data-unicode.json index 402a390..0232029 100644 --- a/tests/test-data-unicode.json +++ b/tests/test-data-unicode.json @@ -1878,5 +1878,117 @@ "name": "SyntaxError", "message": "classEscape at position 2\n [\\c]\n ^", "input": "[\\c]" + }, + "\\08": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid decimal escape in unicode mode at position 1\n \\08\n ^", + "input": "\\08" + }, + "\\09": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid decimal escape in unicode mode at position 1\n \\09\n ^", + "input": "\\09" + }, + "[\\08]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid decimal escape in unicode mode at position 2\n [\\08]\n ^", + "input": "[\\08]" + }, + "[\\09]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid decimal escape in unicode mode at position 2\n [\\09]\n ^", + "input": "[\\09]" + }, + "[\\0]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 1, + 3 + ], + "raw": "\\0" + } + ], + "negative": false, + "range": [ + 0, + 4 + ], + "raw": "[\\0]" + }, + "\\0a": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 0, + 2 + ], + "raw": "\\0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 97, + "range": [ + 2, + 3 + ], + "raw": "a" + } + ], + "range": [ + 0, + 3 + ], + "raw": "\\0a" + }, + "\\400": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid decimal escape in unicode mode at position 1\n \\400\n ^", + "input": "\\400" + }, + "[\\400]": { + "type": "error", + "name": "SyntaxError", + "message": "Invalid decimal escape in unicode mode at position 2\n [\\400]\n ^", + "input": "[\\400]" + }, + "[\\B]": { + "type": "error", + "name": "SyntaxError", + "message": "\\B not possible inside of CharacterClass at position 2\n [\\B]\n ^", + "input": "[\\B]" + }, + "\\A": { + "type": "error", + "name": "SyntaxError", + "message": "atomEscape at position 1\n \\A\n ^", + "input": "\\A" + }, + "\\z": { + "type": "error", + "name": "SyntaxError", + "message": "atomEscape at position 1\n \\z\n ^", + "input": "\\z" + }, + "\\Z": { + "type": "error", + "name": "SyntaxError", + "message": "atomEscape at position 1\n \\Z\n ^", + "input": "\\Z" } } diff --git a/tests/test-data.json b/tests/test-data.json index dbd6a84..00fe99f 100644 --- a/tests/test-data.json +++ b/tests/test-data.json @@ -22332,15 +22332,31 @@ "input": "[\\10b-G]" }, "[\\B]": { - "type": "error", - "name": "SyntaxError", - "message": "\\B not possible inside of CharacterClass at position 2\n [\\B]\n ^", - "input": "[\\B]" + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 66, + "range": [ + 1, + 3 + ], + "raw": "\\B" + } + ], + "negative": false, + "range": [ + 0, + 4 + ], + "raw": "[\\B]" }, "[\\Bd-G]": { "type": "error", "name": "SyntaxError", - "message": "\\B not possible inside of CharacterClass at position 2\n [\\Bd-G]\n ^", + "message": "invalid range in character class at position 3: d-G\n [\\Bd-G]\n ^", "input": "[\\Bd-G]" }, "[\\Db-G]": { @@ -30527,7 +30543,7 @@ "[d-G\\B]": { "type": "error", "name": "SyntaxError", - "message": "\\B not possible inside of CharacterClass at position 5\n [d-G\\B]\n ^", + "message": "invalid range in character class at position 1: d-G\n [d-G\\B]\n ^", "input": "[d-G\\B]" }, "[d-G\\a]": { @@ -38682,5 +38698,1376 @@ "name": "SyntaxError", "message": "Expected atom at position 2\n \\B{1}\n ^", "input": "\\B{1}" + }, + "[\\c0]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "controlLetter", + "codePoint": 16, + "range": [ + 1, + 4 + ], + "raw": "\\c0" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\c0]" + }, + "[\\c1]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "controlLetter", + "codePoint": 17, + "range": [ + 1, + 4 + ], + "raw": "\\c1" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\c1]" + }, + "[\\c9]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "controlLetter", + "codePoint": 25, + "range": [ + 1, + 4 + ], + "raw": "\\c9" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\c9]" + }, + "[\\c0-\\c9]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "controlLetter", + "codePoint": 16, + "range": [ + 1, + 4 + ], + "raw": "\\c0" + }, + "max": { + "type": "value", + "kind": "controlLetter", + "codePoint": 25, + "range": [ + 5, + 8 + ], + "raw": "\\c9" + }, + "range": [ + 1, + 8 + ], + "raw": "\\c0-\\c9" + } + ], + "negative": false, + "range": [ + 0, + 9 + ], + "raw": "[\\c0-\\c9]" + }, + "\\08": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 0, + 2 + ], + "raw": "\\0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 56, + "range": [ + 2, + 3 + ], + "raw": "8" + } + ], + "range": [ + 0, + 3 + ], + "raw": "\\08" + }, + "\\09": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 0, + 2 + ], + "raw": "\\0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 57, + "range": [ + 2, + 3 + ], + "raw": "9" + } + ], + "range": [ + 0, + 3 + ], + "raw": "\\09" + }, + "[\\08]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 1, + 3 + ], + "raw": "\\0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 56, + "range": [ + 3, + 4 + ], + "raw": "8" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\08]" + }, + "[\\09]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "null", + "codePoint": 0, + "range": [ + 1, + 3 + ], + "raw": "\\0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 57, + "range": [ + 3, + 4 + ], + "raw": "9" + } + ], + "negative": false, + "range": [ + 0, + 5 + ], + "raw": "[\\09]" + }, + "\\377": { + "type": "value", + "kind": "octal", + "codePoint": 255, + "range": [ + 0, + 4 + ], + "raw": "\\377" + }, + "\\400": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "octal", + "codePoint": 32, + "range": [ + 0, + 3 + ], + "raw": "\\40" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 48, + "range": [ + 3, + 4 + ], + "raw": "0" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\400" + }, + "\\477": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "octal", + "codePoint": 39, + "range": [ + 0, + 3 + ], + "raw": "\\47" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 55, + "range": [ + 3, + 4 + ], + "raw": "7" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\477" + }, + "\\777": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "octal", + "codePoint": 63, + "range": [ + 0, + 3 + ], + "raw": "\\77" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 55, + "range": [ + 3, + 4 + ], + "raw": "7" + } + ], + "range": [ + 0, + 4 + ], + "raw": "\\777" + }, + "\\4000": { + "type": "alternative", + "body": [ + { + "type": "value", + "kind": "octal", + "codePoint": 32, + "range": [ + 0, + 3 + ], + "raw": "\\40" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 48, + "range": [ + 3, + 4 + ], + "raw": "0" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 48, + "range": [ + 4, + 5 + ], + "raw": "0" + } + ], + "range": [ + 0, + 5 + ], + "raw": "\\4000" + }, + "[\\400]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "octal", + "codePoint": 32, + "range": [ + 1, + 4 + ], + "raw": "\\40" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 48, + "range": [ + 4, + 5 + ], + "raw": "0" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\400]" + }, + "[\\377]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "octal", + "codePoint": 255, + "range": [ + 1, + 5 + ], + "raw": "\\377" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\377]" + }, + "[\\47-\\400]": { + "type": "error", + "name": "SyntaxError", + "message": "invalid range in character class at position 1: \\47-\\40\n [\\47-\\400]\n ^", + "input": "[\\47-\\400]" + }, + "()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()\\400": { + "type": "alternative", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 0, + 2 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 2, + 4 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 4, + 6 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 6, + 8 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 8, + 10 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 10, + 12 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 12, + 14 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 14, + 16 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 16, + 18 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 18, + 20 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 20, + 22 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 22, + 24 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 24, + 26 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 26, + 28 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 28, + 30 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 30, + 32 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 32, + 34 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 34, + 36 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 36, + 38 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 38, + 40 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 40, + 42 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 42, + 44 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 44, + 46 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 46, + 48 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 48, + 50 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 50, + 52 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 52, + 54 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 54, + 56 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 56, + 58 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 58, + 60 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 60, + 62 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 62, + 64 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 64, + 66 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 66, + 68 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 68, + 70 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 70, + 72 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 72, + 74 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 74, + 76 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 76, + 78 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 78, + 80 + ], + "raw": "()" + }, + { + "type": "value", + "kind": "octal", + "codePoint": 32, + "range": [ + 80, + 83 + ], + "raw": "\\40" + }, + { + "type": "value", + "kind": "symbol", + "codePoint": 48, + "range": [ + 83, + 84 + ], + "raw": "0" + } + ], + "range": [ + 0, + 84 + ], + "raw": "()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()\\400" + }, + "()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()\\40": { + "type": "alternative", + "body": [ + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 0, + 2 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 2, + 4 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 4, + 6 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 6, + 8 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 8, + 10 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 10, + 12 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 12, + 14 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 14, + 16 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 16, + 18 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 18, + 20 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 20, + 22 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 22, + 24 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 24, + 26 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 26, + 28 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 28, + 30 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 30, + 32 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 32, + 34 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 34, + 36 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 36, + 38 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 38, + 40 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 40, + 42 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 42, + 44 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 44, + 46 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 46, + 48 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 48, + 50 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 50, + 52 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 52, + 54 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 54, + 56 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 56, + 58 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 58, + 60 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 60, + 62 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 62, + 64 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 64, + 66 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 66, + 68 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 68, + 70 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 70, + 72 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 72, + 74 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 74, + 76 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 76, + 78 + ], + "raw": "()" + }, + { + "type": "group", + "behavior": "normal", + "body": [], + "range": [ + 78, + 80 + ], + "raw": "()" + }, + { + "type": "reference", + "matchIndex": 40, + "range": [ + 80, + 83 + ], + "raw": "\\40" + } + ], + "range": [ + 0, + 83 + ], + "raw": "()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()\\40" + }, + "[\\B-Z]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "characterClassRange", + "min": { + "type": "value", + "kind": "identifier", + "codePoint": 66, + "range": [ + 1, + 3 + ], + "raw": "\\B" + }, + "max": { + "type": "value", + "kind": "symbol", + "codePoint": 90, + "range": [ + 4, + 5 + ], + "raw": "Z" + }, + "range": [ + 1, + 5 + ], + "raw": "\\B-Z" + } + ], + "negative": false, + "range": [ + 0, + 6 + ], + "raw": "[\\B-Z]" + }, + "[^\\B]": { + "type": "characterClass", + "kind": "union", + "body": [ + { + "type": "value", + "kind": "identifier", + "codePoint": 66, + "range": [ + 2, + 4 + ], + "raw": "\\B" + } + ], + "negative": true, + "range": [ + 0, + 5 + ], + "raw": "[^\\B]" + }, + "\\A": { + "type": "value", + "kind": "identifier", + "codePoint": 65, + "range": [ + 0, + 2 + ], + "raw": "\\A" + }, + "\\z": { + "type": "value", + "kind": "identifier", + "codePoint": 122, + "range": [ + 0, + 2 + ], + "raw": "\\z" + }, + "\\Z": { + "type": "value", + "kind": "identifier", + "codePoint": 90, + "range": [ + 0, + 2 + ], + "raw": "\\Z" } } diff --git a/tests/update-fixtures.js b/tests/update-fixtures.js index eb9cd34..93101b5 100644 --- a/tests/update-fixtures.js +++ b/tests/update-fixtures.js @@ -29,6 +29,9 @@ const FIXTURE_URLS = [ 'https://raw.githubusercontent.com/jviereck/regjsparser/gh-pages/test/test-data-unicode-properties.json', 'https://raw.githubusercontent.com/jviereck/regjsparser/gh-pages/test/test-data-unicode-set.json', 'https://raw.githubusercontent.com/jviereck/regjsparser/gh-pages/test/test-data-modifiers-group.json', + 'https://raw.githubusercontent.com/jviereck/regjsparser/gh-pages/test/test-data-lookbehind-modifiers-group.json', + 'https://raw.githubusercontent.com/jviereck/regjsparser/gh-pages/test/test-data-named-groups-unicode-set.json', + 'https://raw.githubusercontent.com/jviereck/regjsparser/gh-pages/test/test-data-buffer-boundaries.json', ]; (async () => { From 6e0117e870294ec2e9eb699c262d5284f275d778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 26 Oct 2026 13:57:16 -0400 Subject: [PATCH 5/5] docs: update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b7ca975..1429887 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ let regex = regjsgen.generate(ast); ## Support Tested on Node.js 16, 18, 20, and 22.
-Compatible with regjsparser v0.12.0’s AST. +Compatible with regjsparser v0.14.0’s AST. [ci]: https://github.com/bnjmnt4n/regjsgen/actions