Unicode 正则表达式 \p{L} 在 NodeJS 中不起作用

rx2*_*347 2 javascript regex unicode node.js

我试图使以下 unicode 正则表达式在 nodejs 中工作,但我得到的只是一个无效的转义错误。我不知道,在这里逃避什么,或者如果出于某种原因这在 node.js 中根本不起作用。这是我原来的正则表达式:

/([\p{L}|\-]+)/ug
Run Code Online (Sandbox Code Playgroud)

如果我像 \p 这样转义 \p \\p,则正则表达式不再起作用(仅输出 p、L 和 -)

这适用于 chrome,所以它也应该以某种方式在 node 中工作,对吧?谢谢你的帮助。

bow*_*art 6

快速浏览一下 nodejs 更新日志,发现了这个 PR:

https://github.com/nodejs/node/pull/19052

其中最值得注意的是:

RegExp Unicode 属性转义处于第 4 阶段,将包含在 ES2018 中。它们从 V8 6.4 开始可用,没有标记,因此它们将在 Node.js v10 中未标记。它们也可以在 Node.js v6-v9 中的 --harmony_regexp_property 标志下和 Node.js v8-v9 中的 --harmony 标志下使用。

因此,从外观上看,如果您在节点 v6-v9 上,则可以通过node使用标志运行来启用此功能。例如,这在节点 v8.11.3 上对我有用:

node --harmony regex-test.js
Run Code Online (Sandbox Code Playgroud)

(其中regex-test.js包含您的示例代码)。在没有标志的情况下运行它会导致您的Invalid escape错误。

如果您可以将节点版本更新到 v10+,则不需要任何标志。