Javascript unicode(希腊语)正则表达式

kyl*_*ito 12 javascript regex unicode character-properties xregexp

我想在希腊文中使用这个正则表达式新的RegExp("\ b"+ pat +"\ b"),但"\ b"元字符仅支持ASCII字符.

我尝试过XregExp库,但我没有设法解决这个问题.

任何建议将不胜感激.

Chr*_*ris 2

所以答案是,你不能使用 JavaScript 本机机制或任何使用这些机制的库来按照你想要的方式匹配单词。正如您已经说过的, \\b 匹配单词。单词必须由单词字符组成。在 JavaScript 中(实际上其他正则表达式实现中的单词字符是az、AZ、0-9 和 _。但许多其他语言只是以与 JavaScript 不同的方式实现 \\b 元字符。

\n\n

答案“JavaScript 不支持 Unicode”有点过于简单,事实上完全错误。JavaScript 只是不使用 unicode 作为字符类。如果 JavaScript 不支持 unicode,你甚至不能在字符串文字中使用 unicode 字符,当然这在 JavaScript 中是可能的。

\n\n

根据ECMA 262 标准(ECMAScript)(第 15.10.2.6 节):

\n\n

[...]\n产生式 Assertion :: \\ b 通过返回一个内部 AssertionTester 闭包进行评估,该闭包采用 State \nargument x 并执行以下操作:

\n\n
    \n
  1. 令 e 为 x 的结束索引。
  2. \n
  3. 调用 IsWordChar(e\xe2\x80\x931) 并令 a 为布尔结果。
  4. \n
  5. 调用 IsWordChar(e) 并令 b 为布尔结果。
  6. \n
  7. 如果 a 为 true,b 为 false,则返回 true。
  8. \n
  9. 如果 a 为假且 b 为真,则返回 true。
  10. \n
  11. 返回 false。\n[..]
  12. \n
\n\n

抽象操作 IsWordChar 采用整数参数 e 并执行以下操作:

\n\n
    \n
  1. 如果 e == \xe2\x80\x931 或 e == InputLength,则返回 false。
  2. \n
  3. 令c 为字符Input[e]。
  4. \n
  5. 如果 c 是下面的 63 个字符之一,则返回 true。\na bcdefghijklmnopqrstuv wxyz \nA BCDEFGHIJKLMNOPQRSTUV WXYZ \n0 1 2 3 4 5 6 7 8 9 _
  6. \n
  7. 返回错误
  8. \n
\n\n

这只是表明, \\b 使用“isWordChar”算法来检查您尝试匹配的内容是否实际上是一个单词。在“isWordChar”的定义中,您可以看到哪些字符将为“isWordChar”返回 true 的确切定义。

\n\n

在我看来,这与所使用的字符集完全无关。这里既不兼容 ASCII 也不兼容 UNICODE。就这63个字符。

\n