首页 > 解决方案 > Unicode 正则表达式 \p{L} 在 NodeJS 中不起作用

问题描述

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

/([\p{L}|\-]+)/ug

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

这在 chrome 中有效,所以它也应该在节点中以某种方式工作,对吧?谢谢你的帮助。

var str = "thÛs Ís spå-rtÅ!";

console.log(str.match(/([\p{L}|\-]+)/ug))

标签: javascriptnode.jsregexunicode

解决方案


快速浏览 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

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

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


推荐阅读