是否可以在不损失性能的情况下将所有出现的子字符串替换为另一个字符串,并完全避免使用 RegExp? IE。将 RegExp 从等式中删除,只是为了确保当您忘记正确转义诸如 +
之类的内容时,不会发生 RegExp 魔法。
'1+1 2+2'.replace('+', '-') -> only first "+" is replaced
'1+1 2+2'.replace(/\+/g, '-') -> undesired regexp complexities
更新1
这并不能解决转义问题:
String.prototype.replaceAll= function(search, replace) {
return this.replace(new RegExp(search, "g"), replace);
}
更新2
进行程序化的 unescape 会影响性能:
RegExp.quote = function(str) {
return (str+'').replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
};
最佳答案
或者,基于 Florian Margaine 的代码和测试用例:
window.replaceQuick = function(subject, search, replace) {
var index = -1, offset = 0;
var result = '';
while ((index = subject.indexOf(search, offset)) !== -1) {
result += subject.substring(offset, index) + replace;
offset = index + search.length;
}
return result + search.substring(offset);
}
由于我正在进行部分提取,因此应该会获得更好的性能。
关于javascript - 替换字符串中的所有匹配项并避免 RegExp 转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28739385/