【问题标题】:regular expression in string.replace with a callback functionstring.replace 中的正则表达式用回调函数
【发布时间】:2011-12-10 19:31:26
【问题描述】:
 function helpLinkConvert(str, p1, offset, s)  {  
      return "<a href=\"look.php?word="
               +encodeURIComponent(p1)+"\">"+p1+"</a>";
     }

var message = "(look: this) is a (look: stackoverflow) question";
message = message .replace(/\(look: (.{1,80})\)/, helpLinkConvert);

这就是我想做的,

之前:

(看:this)是一个(看:stackoverflow)问题。

之后:

thisstackoverflow 问题


当只有一个匹配的字符串时,它可以工作,但在其他情况下它不能正常工作,

我该怎么做?谢谢。

【问题讨论】:

    标签: javascript regex string replace


    【解决方案1】:

    您需要添加全局 g 修饰符和非贪婪匹配,以便正则表达式找到所有匹配项:

    /\(look: (.{1,80}?)\)/g

    在您的代码中:

    function helpLinkConvert(str, p1, offset, s) {  
        return "<a href=\"look.php?word="+encodeURIComponent(p1)+"\">"+p1+"</a>";
    }
    
    var message = "(look: this) is a (look: stackoverflow) question";
    message = message.replace(/\(look: (.{1,80}?)\)/g, helpLinkConvert);
    

    输出:

    "&lt;a href="look.php?word=this"&gt;this&lt;/a&gt; is a &lt;a href="look.php?word=stackoverflow"&gt;stackoverflow&lt;/a&gt; question"

    【讨论】:

    • 或者更好,而不是:.{1,80}? 使用:[^)]{1,80}
    【解决方案2】:

    使用g 标志:

    message .replace(/\(look: (.{1,80})\)/g, helpLinkConvert);
    

    g(代表“全局”)将匹配此字符串上出现的所有个模式,而不仅仅是第一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多