Javascript:传递一个带有匹配的函数来替换(regex,func(arg))不起作用

时间:2011-08-25 14:47:02

标签: javascript regex google-chrome replace arguments

根据这个网站,以下替换方法应该有效,尽管我持怀疑态度。 http://www.bennadel.com/blog/55-Using-Methods-in-Javascript-Replace-Method.htm

我的代码如下:

text = text.replace( 
    new Regex(...),  
    match($1) //$.. any match argument passed to the userfunction 'match',
              //    which itself invokes a userfunction
);

我正在使用Chrome 14,并且没有传递任何传递给函数匹配的参数?

更新

使用时可以使用

text.replace( /.../g, myfunc($1) );

JavaScript解释器期望闭包, - 明显的用户函数似乎导致范围问题,即不会调用进一步的用户功能。最初我想避免关闭以防止必要的内存消耗,但是已经存在安全措施。

要将参数传递给您自己的函数,请执行以下操作(其中参数[0]将包含整个匹配项:

result= text.replace(reg , function (){
        return wrapper(arguments[0]);
});

此外,我在字符串转义和RegEx表达式中遇到了问题,如下所示:

/\s......\s/g

不同

new Regex ("\s......\s" , "g")
new Regex ('\s......\s' , "g")

所以要小心!

2 个答案:

答案 0 :(得分:48)

$ 1必须在字符串中:

"string".replace(/st(ring)/, "gold $1") 
// output -> "gold ring"

有一个功能:

"string".replace(/st(ring)/, function (match, capture) { 
    return "gold " + capture + "|" + match;
}); 
// output -> "gold ring|string"

答案 1 :(得分:0)

我认为你正在寻找新的RegExp(模式,修饰符)。

http://www.w3schools.com/jsref/jsref_obj_regexp.asp