【问题标题】:Unicode regex \p{L} not working in NodeJSUnicode 正则表达式 \p{L} 在 NodeJS 中不起作用
【发布时间】:2020-03-08 02:40:49
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 对于那些和我犯同样错误的人。不要忘记表达式末尾的 /u 修饰符以使 unicode 正则表达式起作用!

标签: javascript node.js regex unicode


【解决方案1】:

快速浏览 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+,则不需要标记。

【讨论】:

  • 天哪,非常感谢!开发服务器仍在 v8.10.0 上。与标志配合得很好。
【解决方案2】:

如果您要使用 --harmony 标志,请考虑这一点

正如节点文档中提到的,--harmony 标志启用了 ES6 的不稳定但很快就会稳定的特性

Node.js 上 --harmony 标志的当前行为是仅启用分阶段功能。毕竟,它现在是 --es_staging 的同义词。如上所述,这些是尚未被认为稳定的已完成功能。如果您想安全起见,尤其是在生产环境中,请考虑删除此运行时标志,直到它默认在 V8 上发布,然后在 Node.js 上发布。如果您保持启用此功能,您应该为进一步的 Node.js 升级做好准备,以便在 V8 更改其语义以更紧密地遵循标准时破坏您的代码。

这里是那个链接 https://nodejs.org/en/docs/es6/#:~:text=The%20current%20behaviour%20of%20the,to%20enable%20staged%20features%20only.&text=If%20you%20want%20to%20play,js.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2013-01-31
    • 2011-04-02
    • 2018-09-08
    • 2021-11-08
    • 2013-09-08
    • 1970-01-01
    • 2018-05-08
    相关资源
    最近更新 更多