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

oca*_*nal 0 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);
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的,

之前:

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

后:

是一个 stackoverflow问题


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

我怎样才能做到这一点?谢谢.

Pau*_*aul 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);
Run Code Online (Sandbox Code Playgroud)

输出:

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

  • 包含非贪婪修饰符的+1. (2认同)