Javascript正则表达式&;日本符号

Javascript正则表达式&;日本符号,javascript,regex,unicode,cjk,Javascript,Regex,Unicode,Cjk,我使用string对象的search()方法查找正则表达式和字符串之间的匹配 它适用于英语单词: "google".search(/\bg/g) // return 0 但此代码不适用于日语字符串: "アイスランド語".search(/\bア/g) // return -1 如何更改正则表达式以在日文字符串和正则表达式之间找到匹配项?问题在于\b。As\b仅匹配: 如果字符串中的第一个字符是 单词字符 在字符串中的最后一个字符之后,如果 字符是一个单词字符 在字符串中的两个字符之间, 其中

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

它适用于英语单词:

"google".search(/\bg/g) // return 0
但此代码不适用于日语字符串:

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

如何更改正则表达式以在日文字符串和正则表达式之间找到匹配项?

问题在于
\b
。As
\b
仅匹配:

  • 如果字符串中的第一个字符是 单词字符
  • 在字符串中的最后一个字符之后,如果 字符是一个单词字符
  • 在字符串中的两个字符之间, 其中一个是单词字符,另一个不是单词字符
(见:)

在JavaScript中,单词字符是字符类
[a-zA-Z0-9_quo;]
(/word bounders/ECMA=ASCII)。

遗憾的是,JavaScript是一个“仅ASCII”正则表达式。不支持Unicode(我的意思是Unicode非ASCII字符没有“分类”。因此
\d
仅为0-9)。如果您需要Javascript中的高级正则表达式(Unicode正则表达式),可以尝试

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


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

谢谢您的回复。有没有办法更改我的regexp而不使用第三方JS库(xregexp.com)?@Andrei技术上讲这是
“アイスランド語".搜寻(/^ア/g) 
将起作用。(在您有限的示例中)。但这不是您想要的:-)它甚至更复杂,因为Javascript没有零宽度回溯(在其他语言中,您可以做类似
(?是的,这很有趣,因为这意味着,尽管我确信Andrei有很好的理由,\b('word-boundary'))在日语的上下文中似乎没有任何意义。日语中通常没有空格,也没有明确的算法来告诉我可以看到的单词边界。例如:私はアイスランドのごはんがすき 第一は 作为单词边界,但同一个字符在以后肯定不是“单词边界”的地方再次被使用。这就像你必须先解析语言,然后才能决定它是否是单词边界。@PandaWood我也这么认为,但由于我还是日语研究的新手,我不想泄露一些肤浅的知识,我无法解释清楚