2012-11-26 64 views
156

này không làm việc và tôi cần nó nặngjQuery - thay thế tất cả các trường hợp của một nhân vật trong một chuỗi

$('some+multi+word+string').replace('+', ' '); 

luôn được

some multi+word+string 

nó luôn luôn thay thế cho chỉ trường hợp đầu tiên, nhưng tôi cần nó để làm việc cho tất cả + biểu tượng.

+4

Câu hỏi lớn nhất tôi có, ngay bây giờ, là lý do tại sao bạn tạo một đối tượng jQuery từ một chuỗi, thay vì '" một số + đa + từ + chuỗi ".replace (/ \ +/g, '');' ? Oh, và đọc qua trang [Regular Expressions 'của Mozilla Developer Network] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions). Nó rất hữu ích và giải thích mọi thứ khá tốt. –

+0

thực sự nó là một biến mà biến thành một chuỗi – thednp

+0

Nhưng nếu biến có giá trị của một chuỗi, hoặc một chuỗi được gán cho biến đó, chỉ cần gọi 'replace()' trên biến: 'var str = 'some + multi + từ + chuỗi '; str.replace (/ \ +/g, ''); ' –

Trả lời

317

Bạn cần phải sử dụng một biểu thức chính quy, do đó bạn có thể xác định toàn cầu (g) ​​cờ:

var s = 'some+multi+word+string'.replace(/\+/g, ' '); 

(tôi loại bỏ các $() xung quanh chuỗi, như replace không phải là một phương pháp jQuery, do đó sẽ không làm việc ở tất cả.)

+0

làm cách nào tôi có thể sử dụng một biến trong mã này như ví dụ này: for (i = 0; i <= 100; i ++) { str = str.replace (/ "_ 0x69b9 [" + i.toString() + "]"/g, _array [i]); } – SalmanShariati

+1

Bạn sẽ tạo một đối tượng 'RegExp' từ một chuỗi:' str = str.replace (mới RegExp ('"_ 0x69b9 [' + i + ']"', 'g'), _array [i]); ' . Tuy nhiên, hãy xem xét nếu bạn có thể sử dụng '(\ d +)' trong mẫu để khớp với bất kỳ số nào và lấy nó để tra cứu trong hàm thay thế, theo cách đó bạn có thể thay thế tất cả các trường hợp trong một thay thế thay vì thực hiện 101 thay thế. – Guffa

+0

Trong trường hợp bạn không thể làm cho nó hoạt động, thật dễ dàng để bỏ qua rằng/\ +/g không nằm trong dấu ngoặc kép. Phải mất một chút đầu gãi trước khi tôi nhận ra điều đó. –

30
'some+multi+word+string'.replace(/\+/g, ' '); 
            ^^^^^^ 

'g'

Cheers = "toàn cầu"

+0

Có, nó cần phải được regex, và có chuyển đổi 'g' là bắt buộc. Nhưng, không: ['Uncaught TypeError: Object [object Object] không có phương thức 'replace''] (http://jsfiddle.net/davidThomas/eD23g/). –

+0

@DavidThomas Tôi đã suy nghĩ về điều này trong 4 năm, và tôi không đồng ý. Hay đúng hơn, tôi không thể tái tạo lỗi của bạn. – Madbreaks

+1

nó bị ám ảnh điên cuồng sâu sắc. Giấc ngủ đã không đến dễ dàng trong 4 năm qua trong khi tâm trí @Madbreaks đang phát điên với ý tưởng về cách nó không hoạt động - trên một lưu ý khác^+ 1 - cảm ơn vì đã giải thích g trong hàm replace() – TT120

6

RegEx là cách để đi trong hầu hết các trường hợp.

Trong một số trường hợp, nó có thể được nhanh hơn để chỉ định nhiều yếu tố hoặc các yếu tố cụ thể để thực hiện các thay thế vào lúc:

$(document).ready(function() { 
    $('.myclass').each(function() { 
     $('img').each(function() { 
      $(this).attr('src', $(this).attr('src').replace('_s.jpg', '_n.jpg')); 
     }) 
    }) 
}); 

này nào thay thế một lần trên mỗi chuỗi, nhưng nó có phải nó sử dụng một cụ thể hơn bộ chọn.

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