2011-09-05 30 views
31

Tôi đang tìm bất kỳ sự thực hiện nào của hàm thay thế không phân biệt chữ hoa chữ thường. Ví dụ, nó sẽ hoạt động như thế này:Không phân biệt chữ hoa chữ thường thay thế tất cả

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

và kết quả nên là:

'Thas as Ias' 

Bất kỳ ý tưởng?
Cảm ơn bạn trước.

UPDATE:
Nó sẽ là tuyệt vời để sử dụng nó với biến:

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

Trả lời

70

Hãy thử regex:

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

làm việc Ví dụ: http://jsfiddle.net/9xAse/

ví dụ:
Sử dụng RegExp đối tượng:

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

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

Tuyệt vời! Nhưng làm thế nào để sử dụng biến thay vào đó? '.replace (searchMask, replaceMask)'? –

+0

@DOTNET Ninja: Cập nhật bài đăng với ví dụ. – Chandu

+0

Tôi sẽ cung cấp cho hai upvotes nếu tôi có thể cho các mẫu mã thứ hai mà thực sự giải thích những gì đang xảy ra –

1

Sử dụng một biểu thức chính quy.

'This iS IIS'.replace(/is/ig, 'as') 
19
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); 
}; 

Công cụ này thực hiện chính xác ví dụ bạn đã cung cấp.

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

Returns

'Thas as Ias' 
+0

Đã chỉnh sửa: Quên 'return'! –

+0

Đây thực sự là giải pháp đúng. Câu trả lời của Chandu sẽ làm cho một mớ hỗn độn khi có một nhân vật có một ý nghĩa regex. – FlorianB

6

Khi bạn sử dụng các giải pháp regex bạn có thể nhận ra vấn đề nếu bạn thay thế chuỗi chứa ví dụ "?" Vì vậy, bạn phải thoát khỏi tất cả các ký tự regex hoặc sử dụng ví dụ:

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); 
}; 

điều này sẽ không thay đổi tất cả các lần xuất hiện của 'là' trong chuỗi. Do đó bạn có thể viết một vòng lặp while trong hàm.

+0

Điều này cũng tăng gấp đôi so với giải pháp regexp .. xem https://jsperf.com/replace-all-case-insenstive/1 – kofifus

0

Tôi đề xuất hàm str_ireplace từ php.js, thậm chí còn thay thế chuỗi từ mảng.

Các vấn đề liên quan