我应该regexp吗?测试之前,我string.replace
Should I regexp.test before I string.replace?
当我想替换字符串的某些部分时,我应该像这样直接调用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?在这种情况下,我认为调用替换直接是正确的方式去避免有正则表达式引擎匹配字符串两次?
您不必使用test
。replace
中的函数只在出现匹配时执行。
- 没有匹配:没有函数(eval)调用
- 1次匹配:1次呼叫
- 2次匹配:2次呼叫
- 等。
还有,为什么要用eval?eval
执行参数,就好像它是一个JavaScript表达式。因为您知道输入格式,所以很可能不需要eval就可以实现相同的行为。
相关文章:
- Javascript 如何强制 string.replace 不将我的字符串解释为正则表达式
- 如何在javascript中使用string.replace.将匹配字符串开头的两个不同表达式替换为null
- JavaScript String.replace()中的错误,替换字符串“”$'&”;
- string.replace(“é”, “e”) 不起作用
- string.replace(fromCharCode() , '') 不能替换字符
- Javascript - string.replace() not replacing ALL
- 使用 string.replace() 更改 URL
- Javascript 中的 String.replace() 方法可以用来添加换行吗?
- 从回调函数中向 String.replace 返回一个值
- JavaScript String.replace:如何知道上次调用回调函数
- 如何使用 String.replace() 方法而不弄乱 MS Word 2013 中的空白段落和对象标识符
- jQuery / Javascript String replace
- 为IE8优化JS-String.replace和String.match
- `string.replace`使用美元符号($)作为替换时的怪异行为
- 正在转义String.replace的$符号
- String.replace IE11中的奇怪行为
- String.replace(Regex) returns undefineds
- 将string.replace()Javascript与Unicode符号一起使用时出现问题
- 使用正则表达式的javascript中的String.replace方法
- Javascript String.replace