【问题标题】:Regex wordwrap with UTF8 characters in JSJS中带有UTF8字符的正则表达式自动换行
【发布时间】:2011-04-16 18:27:55
【问题描述】:


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

我现在正在做的是:

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】:

    问题在于 JavaScript 只能识别 ASCII 字母(和数字/下划线)之前/之后的单词边界。只需删除 \b 锚点,它应该可以工作。

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

    【讨论】:

    • 看起来很糟糕 ;-) 但它确实有效 非常非常非常感谢!!!你的解决方案很聪明。谢谢你的解释!!!
    猜你喜欢
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多