为什么 unicode 属性转义会抛出“未知属性”错误?

问题描述

MDN website 给出了具有 unicode 支持的匹配模式的示例,例如

const sentence = 'A ticket to 大阪 costs ¥2000 ?.';
const regexpcurrencyOrPunctuation = /\p{Sc}|\p{P}/gu;
console.log(sentence.match(regexpcurrencyOrPunctuation));

它作为一个片段在 stackoverflow 上运行良好。

但是,在 javascript codesandbox 中,代码抛出错误

/src/index.js:未知属性:Sc

Next.js 代码和框中,它也会抛出相同的错误

另一方面,在 regex101 网站上,模式与句子正确匹配,具有 ECMAScript 风格和“gu”标志。

此外,在我现实世界的 Next.js Typescript 项目中,直到昨天我将所有依赖项升级到最新版本时,模式 /\P{L}/gu 都运行良好。现在它在 tsconfig.json 中将 strict 模式设置为 true 时抛出类似的错误strict 模式设置为 false 时它仍然可以正常工作。

为什么会发生此错误以及如何在代码中使用 /\p{Sc}|\p{P}/gu/\P{L}/gu 正则表达式模式?

解决方法

基于 the documentationSc 是一个非二进制属性。这意味着您不能只使用 \p{Sc};您必须使用 \p{Sc=some_script_name},其中脚本名称取自 here