JS中使用UTF8字符的正则表达式wordwrap

时间:2010-09-24 12:31:46

标签: javascript regex utf-8


我已经阅读了所有这里的文章,它们触及了类似的问题,但仍然没有得到任何解决方案。在我的情况下,我想用一个跨度包裹一个字符串的每个单词。这些单词包含特殊字符,如'äüö......'

我现在正在做的是:

var textWrap = text.replace(/\b([a-zA-Z0-9ßÄÖÜäöüÑñÉéÈèÁáÀàÂâŶĈĉĜĝŷÊêÔôÛûŴŵ-]+)\b/g, "<span>$1</span>");

但是,如果äññ或任何NON-Ascii角色在最后或开头,它也会像边界一样起作用。这些人物在一个词之内并不是一个边界。

'Ärmelkanal' becomes Ä<span>rmelkanal</span> but should be <span>Ärmelkanal</span>
'Käse'works fine... becomes <span>Käse</span>
'diré' becomes <span>dir</span>é but should be <span>diré</span>

任何建议都将非常感谢。我需要在客户端上这样做:-(顺便说一句,我提到我讨厌正则表达式; - )

非常感谢你!

1 个答案:

答案 0 :(得分:1)

问题是JavaScript只在ASCII字母(和数字/下划线)之前/之后识别字边界。只需删除\b锚点就可以了。

result = subject.replace(/[a-zA-Z0-9ßÄÖÜäöüÑñÉéÈèÁáÀàÂâŶĈĉĜĝŷÊêÔôÛûŴŵ-]+/g, "<span>$&</span>");