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



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

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

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

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

var str = "thÛs Ís spå-rtÅ!";
console.log(str.match(/([p{L}|-]+)/ug))

快速浏览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 v4-v9中的--harmony标志下使用。

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

node --harmony regex-test.js

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

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

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

正如节点文档中所提到的,--harmony标志启用了ES6 的非稳定但即将稳定的特性

Node.js上--harmony标志的当前行为是仅启用分段功能。毕竟,它现在是--es_stage的同义词。如上所述,这些都是尚未被认为稳定的完整功能。如果你想保持安全,尤其是在生产环境中,请考虑删除此运行时标志,直到它默认在V8上发布,从而在Node.js上发布。如果你保持启用状态,那么如果V8更改其语义以更严格地遵循标准,你应该为Node.js的进一步升级做好准备,以破坏你的代码。

这是它的链接https://nodejs.org/en/docs/es6/#:~:text=%20当前的%20行为%20,到%20仅启用%20已暂存的%20功能%20&text=如果%20you%20want%20to%20play,js。

最新更新