我已经阅读了这里所有涉及类似问题的文章,但仍然没有找到任何解决方案。在我的例子中,我想用一个跨度来包装字符串的每个单词。这些词包含特殊字符,例如“äüö...”
我现在正在做的是:
var textWrap = text.replace(/\b([a-zA-Z0-9ßÄÖÜäöüÑñÉéÈèÁáÀàÂâŶĈĉĜĝŷÊêÔôÛûŴŵ-]+)\b/g, "<span>$1</span>");
但是,如果 äüñ 或任何非 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>
如有任何建议,我们将不胜感激。我需要在客户端这样做 :-( 顺便说一句,我有没有提到我讨厌正则表达式 ;-)
非常感谢!
最佳答案
问题是 JavaScript 只能识别 ASCII 字母(和数字/下划线)之前/之后的单词边界。只需放下 \b
anchor 即可。
result = subject.replace(/[a-zA-Z0-9ßÄÖÜäöüÑñÉéÈèÁáÀàÂâŶĈĉĜĝŷÊêÔôÛûŴŵ-]+/g, "<span>$&</span>");
关于javascript - JS中带有UTF8字符的正则表达式自动换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787072/