不区分大小写替换所有

时间:2011-09-05 22:55:21

标签: javascript

我正在寻找不区分大小写的替换函数的任何实现。例如,它应该像这样工作:

'This iS IIS'.replaceAll('is', 'as');

,结果应为:

'Thas as Ias'

任何想法?
提前谢谢。

更新
将它与变量一起使用会很棒:

var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');

6 个答案:

答案 0 :(得分:108)

试试正则表达式:

'This iS IIS'.replace(/is/ig, 'as');

工作示例:http://jsfiddle.net/9xAse/

e.g:
使用RegExp对象:

var searchMask = "is";
var regEx = new RegExp(searchMask, "ig");
var replaceMask = "as";

var result = 'This iS IIS'.replace(regEx, replaceMask);

答案 1 :(得分:40)

String.prototype.replaceAll = function(strReplace, strWith) {
    // See http://stackoverflow.com/a/3561711/556609
    var esc = strReplace.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    var reg = new RegExp(esc, 'ig');
    return this.replace(reg, strWith);
};

这完全实现了您提供的示例。

'This iS IIS'.replaceAll('is', 'as');

返回

'Thas as Ias'

答案 2 :(得分:6)

当您使用正则表达式解决方案时,如果您的替换字符串包含例如“?”。因此,您必须转义所有正则表达式字符或使用例如:

String.replacei = String.prototype.replacei = function (rep, rby) {
    var pos = this.toLowerCase().indexOf(rep.toLowerCase());
    return pos == -1 ? this : this.substr(0, pos) + rby + this.substr(pos + rep.length);
};

这不会改变字符串中'is'的所有出现次数。因此,您可以在函数中编写while循环。

答案 3 :(得分:1)

使用正则表达式。

'This iS IIS'.replace(/is/ig, 'as')

答案 4 :(得分:1)

这是Paul的答案即兴创作,Regex与非正则表达式之间存在性能差距

用于比较的正则表达式代码取自Benjamin Fleming的回答..

JSPerf
区分大小写
正则表达式:66,542运算/秒
非正则表达式:178,636次操作/秒(拆分 - 加入)

<强>柜面敏感
正则表达:37,837次操作/秒
非正则表达式:12,566次操作/秒(indexOf - substr)

&#13;
&#13;
String.prototype.replaces = function(str, replace, incaseSensitive) {
    if(!incaseSensitive){
        return this.split(str).join(replace);
    } else { 
        // Replace this part with regex for more performance

        var strLower = this.toLowerCase();
        var findLower = String(str).toLowerCase();
        var strTemp = this.toString();

        var pos = strLower.length;
        while((pos = strLower.lastIndexOf(findLower, pos)) != -1){
            strTemp = strTemp.substr(0, pos) + replace + strTemp.substr(pos + findLower.length);
            pos--;
        }
        return strTemp;
    }
};

// Example
var text = "A Quick Dog Jumps Over The Lazy Dog";
console.log(text.replaces("dog", "Cat", true));
&#13;
&#13;
&#13;

答案 5 :(得分:-2)

我推荐php.js中的str_ireplace函数,它甚至可以替换数组中的字符串。