字符串形式的正则表达式.替换为回调函数

regular expression in string.replace with a callback function

本文关键字:回调 函数 替换 正则表达式 字符串      更新时间:2023-09-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);

这就是我想要做的,

:

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

:

这是一个stackoverflow问题


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

我该怎么做呢?谢谢。

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

使用g标志:

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

g(代表"global")将匹配该字符串中出现的所有模式,而不仅仅是第一个。