JS 中使用 UTF8 字符的正则表达式自动换行

问题描述 投票:0回答:1

我已经阅读了这里涉及类似问题的所有文章,但仍然没有找到任何解决方案。就我而言,我想用跨度包裹字符串的每个单词。这些单词包含特殊字符,例如“äüö...”

我现在正在做的是:

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 regex utf-8
1个回答
1
投票

问题在于 JavaScript 仅识别 ASCII 字母(和数字/下划线)之前/之后的单词边界。只需放下

\b
锚点就可以了。

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