javascript - 替换字符串中的所有匹配项并避免 RegExp 转义

标签 javascript string replace

是否可以在不损失性能的情况下将所有出现的子字符串替换为另一个字符串,并完全避免使用 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);
    }

由于我正在进行部分提取,因此应该会获得更好的性能。

http://jsperf.com/replaceall-regex-or-not/3

关于javascript - 替换字符串中的所有匹配项并避免 RegExp 转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28739385/

相关文章:

javascript - 在我的 Angular Controller 中调试 promise ,如果错误消息中没有文件名和 lineno,则非常困难

javascript - 如何通过 ui-select 值设置 ng-model 值

javascript - 如何使用 replace() 方法更改 Javascript 中字符串的所有字符?

replace - 如何找到每个匹配的 byte slice 并将其替换为另一个片?

javascript - 在选择的 jquery ui 选项卡上获取选项卡文本

javascript - 如何在实际上传之前分析即将上传的文件?

java - 如何检查字符串中的字母/字符是否都在字符数组中找到

C 编程从命令行输入字符串中读取整数

c# - 无法在c#中的文本框中输入负数

Javascript 替换并 $ 符号在 newSubStr 中