【问题标题】:Handling Multiple JavaScript Replace Matches处理多个 JavaScript 替换匹配
【发布时间】:2009-06-17 21:39:21
【问题描述】:

我有以下字符串:

This *is* a *test*!

我想将 * 字符包围的单词加粗(例如示例中的“is”和“test”)。

我有以下 JavaScript 代码:

var data = "This *is* a *test*!";
return data.replace(/\*(.*)\*/g, <b>$1</b>);

当字符串返回时,我得到以下信息:

This <b>is* a *test</b>!

如何更改模式或基本代码以便按照我想要的方式进行替换?

【问题讨论】:

    标签: javascript regex replace


    【解决方案1】:

    我的 HTML 太乱了...

    var result = "This *is* a *test*!".replace(/\*(.*?)\*/gi, "<b>$1</b>");
    

    【讨论】:

    • 在这个例子中你并不需要 i 修饰符 - .* 将匹配任何大小写,\* 不受大小写影响。
    • 如果文本来自用户(而不是系统),这将更难做到,因为避免 XSS 攻击意味着要么对白名单进行大量清理,要么需要使用不涉及的技术HTML 字符串(例如,改用 DOM API)。
    【解决方案2】:

    您需要通过在 *: 之后添加 ? 运算符来使模式不贪婪

    var data = "This *is* a *test*!";
    return data.replace(/\*(.*?)\*/g, "<b>$1</b>");
    

    这是来自 Mozilla Developer Center 的 JavaScript RegExp 参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2010-10-29
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多