Javascript将unicode句子分成单词

时间:2014-12-15 03:00:26

标签: regex unicode

我正在使用regexp来将句子分成单词数组。

/\b(?![\s.,:;'"])/

它适用于非unicode句子,但在后面的句子中失败。

læseWEB læser teksten på dit website op.

我期待

['læseWEB ', 'læser ', 'teksten ', 'på ', 'dit ', 'website ', 'op.'].

但我得到了

['l', 'æ', 'se', 'WEB', 'l', 'æ', 'ser', 'teksten', 'p', 'å', 'dit','website', 'op']

我知道javascript在unicode操作方面存在问题。

我打算使用XRegExp javascript插件,但我找不到我想要的确切解决方案。

2 个答案:

答案 0 :(得分:1)

JavaScript中\b的定义基于\w的定义,即[A-Za-z0-9_](仅涵盖ASCII字符)。

如果您将XRegExp与Unicode类别+ Unicode属性加载项一起使用,则可以使用以下代码匹配(而不是拆分)字符串:

XRegExp.matchChain("læseWEB læser teksten på dit website op.", [XRegExp("[\\p{Alphabetic}\\p{Nd}\\{Pc}\\p{M}]+", "g")])
>>> [ "læseWEB", "læser", "teksten", "på", "dit", "website", "op" ]

[\\p{Alphabetic}\\p{Nd}\\{Pc}\\p{M}]是<{3}}中建议的不完整的字符效果模拟。但是,它应该适用于大多数目的 - 即使文本使用组合标记而不是单个字形来表示字符,它也可以工作。

如果您不想加载额外的库,可以查看XRegExp库并提取代码点列表以构建您自己的RegExp。

答案 1 :(得分:0)

\b是一个单词边框;它匹配字符串中的一个位置,该字符串的一侧是“单词字符”(字符匹配[0-9_a-zA-Z]),另一侧是非单词字符([^0-9_a-zA-Z])。根据正则表达式,æå和其他类似的字符在非技术上是单词字符,因此它可以为单词创建边框。

有关详细信息,请参阅http://www.regular-expressions.info/wordboundaries.html