我正在寻找不区分大小写的替换函数的任何实现.例如,它应该像这样工作:
'This iS IIS'.replaceAll('is', 'as');
Run Code Online (Sandbox Code Playgroud)
结果应该是:
'Thas as Ias'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
提前致谢.
更新:
将它与变量一起使用会很棒:
var searchStr = 'is';
'This iS IIS'.replaceAll(searchStr, 'as');
Run Code Online (Sandbox Code Playgroud)
Cha*_*ndu 118
试试正则表达式:
'This iS IIS'.replace(/is/ig, 'as');
Run Code Online (Sandbox Code Playgroud)
工作示例:http://jsfiddle.net/9xAse/
例如:
使用RegExp对象:
var searchMask = "is";
var regEx = new RegExp(searchMask, "ig");
var replaceMask = "as";
var result = 'This iS IIS'.replace(regEx, replaceMask);
Run Code Online (Sandbox Code Playgroud)
Ben*_*ing 42
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);
};
Run Code Online (Sandbox Code Playgroud)
这完全实现了您提供的示例.
'This iS IIS'.replaceAll('is', 'as');
Run Code Online (Sandbox Code Playgroud)
返回
'Thas as Ias'
Run Code Online (Sandbox Code Playgroud)
当您使用正则表达式解决方案时,如果您的替换字符串包含例如"?",则可能会出现问题.所以你必须逃避所有正则表达式字符或使用例如:
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);
};
Run Code Online (Sandbox Code Playgroud)
这不会改变字符串中'is'的所有出现次数.因此,您可以在函数中编写while循环.
这是 Paul 的回答的即兴创作,正则表达式与非正则表达式之间存在性能差距
用于比较的正则表达式代码采用本杰明·弗莱明的答案。
JSPerf
区分大小写的正则
表达式:66,542 次操作/秒
非正则表达式:178,636 次操作/秒(拆分 - 连接)
区分大小写的正则
表达式:37,837 次操作/秒
非正则表达式:12,566 次操作/秒(indexOf - substr)
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));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53979 次 |
| 最近记录: |