NodeJS中Unicode正则表达式\p{L}未能正常工作

3

我正在尝试在nodejs中使用以下Unicode正则表达式,但是我得到的是无效转义错误。我不能确定这里需要转义什么或者是否由于某种原因在node中根本不起作用。这是我的原始正则表达式:

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

如果我像\\p这样转义了\p,正则表达式就无法正常工作(只输出p、L和-)。在谷歌浏览器中可以正常工作,所以在Node中也应该可以,对吗?感谢您的帮助。

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

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


1
针对那些和我犯了同样错误的人。别忘了在表达式结尾处加上/u修饰符以使Unicode正则表达式正常工作! - mraxus
2个回答

6

浏览nodejs的更新日志,发现了这个PR:

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

其中最显著的声明是:

RegExp Unicode 属性转义已经处于第四阶段,并将包含在ES2018中。自从V8 6.4起,它们就没有标志了,因此它们将在Node.js v10中取消标记。它们在Node.js v6-v9下也可在--harmony_regexp_property标志下使用,在Node.js v8-v9下可在--harmony标志下使用。

所以看起来,如果你正在使用node v6-v9,你可以通过运行带有标志的node启用此功能。例如,对我而言,在node v8.11.3上,这个方法是有效的:

node --harmony regex-test.js

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

如果您可以更新您的Node版本到v10+,则不需要使用标志。


哇,非常感谢!开发服务器仍在v8.10.0上。使用标志正常工作。 - rx2347

0

如果您要使用 --harmony 标志,请考虑以下内容

正如 Node 文档中所述,--harmony 标志启用了 ES6 的非稳定但即将稳定的功能

--harmony 标志在 Node.js 上的当前行为是仅启用分阶段的功能。毕竟,它现在是 --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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接