我正在使用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插件,但我找不到我想要的确切解决方案。
答案 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。