Javascript正则表达式&日本符号

时间:2011-10-26 08:52:00

标签: javascript regex unicode cjk

我使用字符串对象的search()方法来查找正则表达式和字符串之间的匹配。

它适用于英语单词:

"google".search(/\bg/g) // return 0

但是这段代码对日语字符串不起作用:

"アイスランド語".search(/\bア/g) // return -1

如何更改正则表达式以查找日语字符串和正则表达式之间的匹配?

2 个答案:

答案 0 :(得分:4)

可悲的是Javascript是一个“仅限ASCII”的正则表达式。不支持Unicode(我的意思是Unicode非ASCII字符不是“分为类”。所以\d例如只有0-9)。如果您需要Javascript中的高级正则表达式(Unicode正则表达式),则可以尝试http://xregexp.com/

我们甚至不会深入探讨代理对的问题。 Javascript中的字符是UTF-16点,因此它并不总是“完整”的Unicode字符。幸运的是日语应完全在BMP中(但请注意Han unification在平面2中,因此每个字符都是2x UTF-16字符)

如果您想阅读有关Unicode的内容,可以从Wiki Mapping of Unicode characters开始。

答案 1 :(得分:3)

问题是\b。由于\b仅匹配:

  • 在字符串中的第一个字符之前,如果第一个字符是a 字符。
  • 字符串中的最后一个字符后,如果是最后一个字符 字符是一个字符。
  • 字符串中的两个字符之间, 其中一个是单词字符而另一个不是单词字符。

(见:http://www.regular-expressions.info/wordboundaries.html

在JavaScript中,单词字符是字符类[a-zA-Z0-9_]ref /字边界/ ECMA = ASCII)。