用匹配替换回调函数

Qia*_*iao 42 javascript

需要更换<wiki>this page</wiki>,以<a href='wiki/this_page'>this page</a>
利用回调函数:

text = text.replace(/<wiki>(.+?)<\/wiki>/g, function(match)
    {
        return "<a href='wiki/"+match.replace(/ /g, '_')+"'>"+match+"</a>";
    }
);
Run Code Online (Sandbox Code Playgroud)

结果是该标签<wiki>被保留(完全匹配) -<a href='wiki/<wiki>this_page</wiki>'><wiki>this page</wiki></a>

有没有办法获得匹配[0],匹配[1],就像在PHP中一样preg_replace_callback()

SLa*_*aks 77

replace函数的回调需要比赛作为参数.

例如:

text = text.replace(/<wiki>(.+?)<\/wiki>/g, function(match, contents, offset, input_string)
    {
        return "<a href='wiki/"+contents.replace(/ /g, '_')+"'>"+contents+"</a>";
    }
);
Run Code Online (Sandbox Code Playgroud)

(第二个参数是第一个捕获组)

  • 我认为答案是可以的,但它太简短了。此外,匹配函数的最后两个参数的顺序似乎不正确。请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter,其中解释了匹配函数接收到的参数数量取决于数量“带括号的子匹配[es]”。 (3认同)
  • 工作.现在我知道JavaScript引用了 (2认同)