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

时间:2011-04-13 13:33:21

标签: javascript regex unicode character-properties xregexp

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

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

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:4)

我认为这对你的回答很有帮助。

<script src="xregexp.js"></script>
<script src="xregexp-unicode-base.js"></script>
<script>
    var unicodeWord = XRegExp("^\\p{L}+$");

    unicodeWord.test("Русский"); // true
    unicodeWord.test("日本語"); // true
    unicodeWord.test("العربية"); // true
</script>

<!-- \p{L} is included in the base script, but other categories, scripts,
and blocks require token packages -->
<script src="xregexp-unicode-scripts.js"></script>
<script>
    XRegExp("^\\p{Katakana}+$").test("カタカナ"); // true
</script>

请参阅以下位置: http://xregexp.com/plugins/

答案 1 :(得分:2)

所以答案是,您不能使用JavaScript本机机制或使用这些机制的任何库以您希望的方式匹配单词。如你所说,\ b匹配单词。单词必须由单词字符组成。在JavaScript(实际上其他正则表达式实现中,单词字符是 a-z,A-Z,0-9和_ 。但是许多其他语言只是以不同的方式实现了\ b元字符。

答案“JavaScript不支持Unicode”有点容易,事实上完全错误。 JavaScript只是不为字符类使用unicode。如果JavaScript不支持unicode,你甚至无法在字符串文字中使用unicode字符,当然这在JavaScript中是可行的。

根据ECMA 262 Standard(ECMAScript)(第15.10.2.6节):

[...] 生产Assertion :: \ b通过返回一个带状态的内部AssertionTester闭包来计算 参数x并执行以下操作:

  1. 设e为x的endIndex。
  2. 调用IsWordChar(e-1)并将a作为布尔结果。
  3. 调用IsWordChar(e)并将b作为布尔结果。
  4. 如果a为true且b为false,则返回true。
  5. 如果a为假且b为真,则返回true。
  6. 返回false。 [..]
  7. 抽象操作IsWordChar采用整数参数e并执行以下操作:

    1. 如果e == -1或e == InputLength,则返回false。
    2. 设c为字符Input [e]。
    3. 如果c是下面六十三个字符之一,则返回true。 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z. 0 1 2 3 4 5 6 7 8 9 _
    4. 返回false
    5. 这只是表明,\ b使用“isWordChar”算法来检查你尝试匹配的是否实际上是一个单词。在他对“isWordChar”的定义中,您可以看到“isWordChar”中哪些字符将返回true的确切定义。

      在我的意见中,这与使用的字符集完全无关。这里既不是ASCII也不是UNICODE。这只是63个字符。