我已经阅读了这里涉及类似问题的所有文章,但仍然没有找到任何解决方案。就我而言,我想用跨度包裹字符串的每个单词。这些单词包含特殊字符,例如“äüö...”
我现在正在做的是:
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
锚点就可以了。
result = subject.replace(/[a-zA-Z0-9ßÄÖÜäöüÑñÉéÈèÁáÀàÂâŶĈĉĜĝŷÊêÔôÛûŴŵ-]+/g, "<span>$&</span>");