带有回调函数的string.replace中的正则表达式

时间:2011-12-10 19:31:27

标签: javascript regex string replace

 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);

这就是我想做的事,

之前:

(看:这个)是一个(look:stackoverflow)问题。

之后:

this是一个stackoverflow问题


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

我该怎么做?感谢。

2 个答案:

答案 0 :(得分:5)

您需要添加全局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);

输出:

"<a href="look.php?word=this">this</a> is a <a href="look.php?word=stackoverflow">stackoverflow</a> question"

答案 1 :(得分:2)

使用g标志:

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

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