Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该在使用string.replace之前使用regexp.test吗?_Javascript_Regex - Fatal编程技术网

Javascript 我应该在使用string.replace之前使用regexp.test吗?

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

当我想替换字符串的某些部分时,我应该像这样直接调用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)) {
    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似乎是一个不错的选择。但要确保来源是可靠的。