NodeJS 中的非捕获分支重置正则表达式
Non capturing branch reset regex in NodeJS
https://regex101.com/r/UXnhTy/1
var date = /(?|(Sat)ur|(Sun))day/;
console.log(date.exec("Sunday"));
这失败了:
SyntaxError: Invalid regular expression: /(?|(Sat)ur|(Sun))day/: Invalid group
是否有支持此功能的 NodeJS 版本?或者那里的一些图书馆
我用 nodejs v8.12.0 测试了这个
不是真的。 JavaScript 的高级替代正则表达式库是 XRegExp, but it doesn't have the feature you're after - not even as an addon.
XRegExp 支持的一个更简单的正则表达式特性是 named capture groups,所以你可以这样写:
var days = XRegExp('(?:(?<d>Sat)ur|(?<d>Sun))day', 'gi');
您不能使用数字作为组名,但命名组应该符合您的需要 - 它们允许反向引用(使用 \k<d>
)、替换(${d}
)、捕获(match.d
), 以及常规编号组的所有特征。
ES2018 原生支持命名捕获组:ES2018 Regular Expression Updates。
根据node.green, named capture groups are supported by Node.js ≥10.3.0, or by ≥8.6.0 with the --harmony
flag.
https://regex101.com/r/UXnhTy/1
var date = /(?|(Sat)ur|(Sun))day/;
console.log(date.exec("Sunday"));
这失败了:
SyntaxError: Invalid regular expression: /(?|(Sat)ur|(Sun))day/: Invalid group
是否有支持此功能的 NodeJS 版本?或者那里的一些图书馆
我用 nodejs v8.12.0 测试了这个
不是真的。 JavaScript 的高级替代正则表达式库是 XRegExp, but it doesn't have the feature you're after - not even as an addon.
XRegExp 支持的一个更简单的正则表达式特性是 named capture groups,所以你可以这样写:
var days = XRegExp('(?:(?<d>Sat)ur|(?<d>Sun))day', 'gi');
您不能使用数字作为组名,但命名组应该符合您的需要 - 它们允许反向引用(使用 \k<d>
)、替换(${d}
)、捕获(match.d
), 以及常规编号组的所有特征。
ES2018 原生支持命名捕获组:ES2018 Regular Expression Updates。
根据node.green, named capture groups are supported by Node.js ≥10.3.0, or by ≥8.6.0 with the --harmony
flag.