我应该regexp吗?测试之前,我string.replace

Should I regexp.test before I string.replace?

本文关键字:string replace regexp 测试 我应该      更新时间:2023-09-26

当我想替换字符串的某些部分时,我应该像这样直接调用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);
    });
}

我想这归结为字符串如何。Replace (regex, string)函数工作。它会在没有匹配的情况下进入回调吗,还是直接返回arg?在这种情况下,我认为调用替换直接是正确的方式去避免有正则表达式引擎匹配字符串两次?

您不必使用testreplace中的函数只在出现匹配时执行。

  • 没有匹配:没有函数(eval)调用
  • 1次匹配:1次呼叫
  • 2次匹配:2次呼叫
  • 等。

还有,为什么要用eval?eval执行参数,就好像它是一个JavaScript表达式。因为您知道输入格式,所以很可能不需要eval就可以实现相同的行为。