是否可以构造一个匹配 Grapheme_Cluster_Break=Extend 的 \p JavaScript regexp

Mar*_*ijn 8 javascript regex unicode

Unicode 文本分割需要访问字符的Grapheme_Cluster_Break属性。众所周知,JavaScript 没有以直接方式提供。我希望我能够在正则表达式中使用Unicode 属性转义来解决这个问题,但这似乎并不那么简单/\p{Grapheme_Cluster_Break=Extend}/u。你可以\p{Grapheme_Extend},但那测试不同的东西。

有没有办法欺骗 JavaScript 运行时通过属性转义向我提供有关字符的 Grapheme_Cluster_Break 值的信息?(如果没有,为什么不呢?)

cra*_*ngo 0

根据 ECMAScript 规范,遗憾的是答案是否定的。

如果您查看 UnicodeMatchProperty 部分:https://tc39.es/ecma262/#sec-runtime-semantics-unicodematchproperty-p

您可以看到,虽然包含了一整套二进制Grapheme_ExtendUnicode 属性(包括例如),但唯一支持的Unicode 属性General_Category是、ScriptScript_Extensions

Grapheme_Cluster_Break不幸的是,不包括在内。

我不知道为什么规范会专门包含一些 Unicode 属性而不包含其他属性。但似乎没有任何访问它的技巧。

虽然它不是 RegExp,但您可以使用 Intl.Segmenter 来分割字素,尽管它目前仅内置于 Chrome 和 Safari 中 - Firefox 尚未实现它。