Aktueller Stand

This commit is contained in:
2026-01-22 19:05:45 +01:00
parent 85dee61a4d
commit e280e4eadb
1967 changed files with 397327 additions and 74093 deletions

View File

@@ -38,10 +38,11 @@ exports.reconstruct = (token) => {
return write_set_tokens_1.writeSetTokens(token);
case types_1.types.GROUP: {
// Check token.remember
const prefix = token.remember ? '' :
token.followedBy ? '?=' :
token.notFollowedBy ? '?!' :
'?:';
const prefix = token.name ? `?<${token.name}>` :
token.remember ? '' :
token.followedBy ? '?=' :
token.notFollowedBy ? '?!' :
'?:';
return `(${prefix}${createAlternate(token)})`;
}
case types_1.types.REPETITION: {

View File

@@ -1 +1 @@
{"version":3,"file":"reconstruct.js","sourceRoot":"","sources":["../lib/reconstruct.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"reconstruct.js","sourceRoot":"","sources":["../lib/reconstruct.ts"],"names":[],"mappings":"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"}

View File

@@ -23,6 +23,15 @@ exports.tokenizer = void 0;
const util = __importStar(require("./util"));
const types_1 = require("./types");
const sets = __importStar(require("./sets"));
/**
* Valid opening characters for capture group names.
*/
const captureGroupFirstChar = /^[a-zA-Z_$]$/i;
/**
* Valid characters for capture group names.
*/
const captureGroupChars = /^[a-zA-Z0-9_$]$/i;
const digit = /\d/;
/**
* Tokenizes a regular expression (that is currently a string)
* @param {string} regexpStr String of regular expression to be tokenized
@@ -79,9 +88,9 @@ exports.tokenizer = (regexpStr) => {
default:
// Check if c is integer.
// In which case it's a reference.
if (/\d/.test(c)) {
if (digit.test(c)) {
let digits = c;
while (i < str.length && /\d/.test(str[i])) {
while (i < str.length && digit.test(str[i])) {
digits += str[i++];
}
let value = parseInt(digits, 10);
@@ -136,23 +145,52 @@ exports.tokenizer = (regexpStr) => {
stack: [],
remember: true,
};
// If if this is a special kind of group.
// If this is a special kind of group.
if (str[i] === '?') {
c = str[i + 1];
i += 2;
// Match if followed by.
if (c === '=') {
group.followedBy = true;
group.remember = false;
// Match if not followed by.
}
else if (c === '!') {
group.notFollowedBy = true;
group.remember = false;
}
else if (c !== ':') {
else if (c === '<') {
let name = '';
if (captureGroupFirstChar.test(str[i])) {
name += str[i];
i++;
}
else {
throw new SyntaxError(`Invalid regular expression: /${regexpStr}/: Invalid capture group name, character '${str[i]}'` +
` after '<' at column ${i + 1}`);
}
while (i < str.length && captureGroupChars.test(str[i])) {
name += str[i];
i++;
}
if (!name) {
throw new SyntaxError(`Invalid regular expression: /${regexpStr}/: Invalid capture group name, character '${str[i]}'` +
` after '<' at column ${i + 1}`);
}
if (str[i] !== '>') {
throw new SyntaxError(`Invalid regular expression: /${regexpStr}/: Unclosed capture group name, expected '>', found` +
` '${str[i]}' at column ${i + 1}`);
}
group.name = name;
i++;
}
else if (c === ':') {
group.remember = false;
}
else {
throw new SyntaxError(`Invalid regular expression: /${regexpStr}/: Invalid group, character '${c}'` +
` after '?' at column ${i - 1}`);
}
group.remember = false;
}
else {
groupCount += 1;

File diff suppressed because one or more lines are too long

View File

@@ -17,6 +17,7 @@ export declare type Group = Base<types.GROUP, {
followedBy?: boolean;
notFollowedBy?: boolean;
lookBehind?: boolean;
name?: string;
}>;
export declare type Set = Base<types.SET, {
set: SetTokens;

View File

@@ -8,7 +8,7 @@
"parser",
"tokenizer"
],
"version": "0.4.3",
"version": "0.5.0",
"repository": {
"type": "git",
"url": "git://github.com/fent/ret.js.git"