Javascript 我应该在使用string.replace之前使用regexp.test吗?
当我想替换字符串的某些部分时,我应该像这样直接调用replace吗Javascript 我应该在使用string.replace之前使用regexp.test吗?,javascript,regex,Javascript,Regex,当我想替换字符串的某些部分时,我应该像这样直接调用replace吗 var r1 = /"\+((:?[\w\.]+)(:?(:?\()(:?.*?)(:?\))|$){0,1})\+"/g; arg = arg.replace(r1, function(outer, inner){ return eval(inner); }); var r1 = /"\+((:?[\w\.]+)(:?(:?\()(:?.*?)(:?\))|$){0,1})\+"/g; if (r1.test(arg
var r1 = /"\+((:?[\w\.]+)(:?(:?\()(:?.*?)(:?\))|$){0,1})\+"/g;
arg = arg.replace(r1, function(outer, inner){
return eval(inner);
});
var r1 = /"\+((:?[\w\.]+)(:?(:?\()(:?.*?)(:?\))|$){0,1})\+"/g;
if (r1.test(arg)) {
arg = arg.replace(r1, function(outer, inner){
return eval(inner);
});
}
或者先测试一个匹配,然后如果它是成功的,就替换它,像这样
var r1 = /"\+((:?[\w\.]+)(:?(:?\()(:?.*?)(:?\))|$){0,1})\+"/g;
arg = arg.replace(r1, function(outer, inner){
return eval(inner);
});
var r1 = /"\+((:?[\w\.]+)(:?(:?\()(:?.*?)(:?\))|$){0,1})\+"/g;
if (r1.test(arg)) {
arg = arg.replace(r1, function(outer, inner){
return eval(inner);
});
}
我想这可以归结为string.replaceregex,string函数的工作原理。即使不存在匹配项,它也会进入我的回调,还是只返回arg?在这种情况下,我假设直接调用replace是避免正则表达式引擎两次匹配字符串的正确方法?您不必使用test。replace中的函数仅在匹配发生时执行
无匹配项:无函数求值调用
1场比赛:1次呼叫
2次匹配:2次呼叫
等
还有,为什么要使用eval?eval执行参数,就像它是一个JavaScript表达式一样。因为您知道输入格式,所以很可能不需要eval就可以实现相同的行为。您不必使用test。replace中的函数仅在匹配发生时执行
无匹配项:无函数求值调用
1场比赛:1次呼叫
2次匹配:2次呼叫
等
还有,为什么要使用eval?eval执行参数,就像它是一个JavaScript表达式一样。因为您知道输入格式,所以很可能不需要eval就可以实现相同的行为。谢谢Rob。我用它从我的文档中提取一些信息,就像在浏览器中一样。该字符串来自服务器上特定于客户的配置。基本上,我要么计算函数调用,要么获取命名空间变量的内容。除了使用eval,我不知道还有什么其他方法可以评估这个问题。如果有其他方法,请咨询。在这种情况下,eval似乎是一个不错的选择。但是要确保消息来源是可靠的。谢谢Rob。我用它从我的文档中提取一些信息,就像在浏览器中一样。该字符串来自服务器上特定于客户的配置。基本上,我要么计算函数调用,要么获取命名空间变量的内容。除了使用eval,我不知道还有什么其他方法可以评估这个问题。如果有其他方法,请咨询。在这种情况下,eval似乎是一个不错的选择。但要确保来源是可靠的。