2013-01-10 93 views
23

Tôi đã tìm kiếm điều này trong một thời gian, và trong khi tôi đã tìm thấy nhiều phản hồi để thay đổi dấu cách thành dấu gạch nối (gạch ngang), tôi không tìm thấy chỉ dân khac.javascript - thay thế dấu gạch ngang (dấu gạch ngang) bằng dấu cách

Ban đầu tôi có:

var str = "This-is-a-news-item-"; 

tôi cố gắng thay thế bằng:

str.replace("-", ' '); 

Và chỉ đơn giản là hiển thị kết quả:

alert(str); 

Ngay bây giờ, nó không làm bất cứ điều gì, vì vậy tôi không chắc chắn nơi để biến. Tôi đã thử đảo ngược một số cái hiện có thay thế khoảng trống bằng dấu gạch ngang và điều đó cũng không hoạt động.

Cảm ơn sự giúp đỡ.

+4

Chuỗi không thể thay đổi được, bạn phải gán lại kết quả. –

Trả lời

69

này sửa chữa nó:

var str = "This-is-a-news-item-"; 
str = str.replace(/-/g, ' '); 
alert(str); 

Có hai vấn đề với mã của bạn:

  1. Thứ nhất, String.replace() không thay đổi chuỗi chính nó, nó lợi nhuận một đã thay đổi chuỗi.
  2. Thứ hai, nếu bạn chuyển một chuỗi cho hàm thay thế, nó sẽ chỉ thay thế phiên bản đầu tiên mà nó gặp phải. Đó là lý do tại sao tôi đã chuyển một số regular expression với cờ g, cho 'toàn cầu', để tất cả các phiên bản sẽ được thay thế.
+0

Demo tại đây: http://jsfiddle.net/vor0nwe/3EuZb/1/ – Martijn

+0

Bingo, đó là nó! Cám ơn rất nhiều! – CMIVXX

4

Tôi nghĩ vấn đề bạn đang gặp phải là hầu như này: -

str = str.replace("-", ' '); 

Bạn cần phải gán kết quả của việc thay đổi để str, để xem sự thay đổi phản ánh.

Từ MSDN Javascript reference: -

Kết quả của thay thế phương pháp là một bản sao của stringObj sau thay thế quy định đã được thực hiện.

Để thay thế tất cả các -, bạn sẽ cần phải sử dụng /g sửa đổi với một tham số regex: -

str = str.replace(/-/g, ' '); 
+0

Điều này sẽ chỉ thay thế trường hợp đầu tiên ... Bạn cần sử dụng cụm từ thông dụng 'toàn cầu' để thay đổi tất cả các phiên bản. – Martijn

+0

@Martijn .. Vâng, tôi đã chỉ ra vấn đề chính. OP sẽ phát hiện ra điều đó sau khi làm việc này. Vẫn cho sự hài lòng của bạn, tôi đã đăng câu trả lời trực tiếp. –

+0

xin lỗi, nhưng bây giờ nó không hoạt động chút nào: bạn vẫn đang truyền một chuỗi, chỉ một chuỗi chứa _pattern for_ một biểu thức chính quy. Mương các dấu ngoặc kép và bạn tốt. – Martijn

3

replace() trả về một chuỗi mới, và các chuỗi ban đầu không được sửa đổi. Bạn cần phải làm

str = str.replace(/-/g, ' '); 
+0

Điều đó dường như không hoạt động vì bất kỳ lý do gì ... [Xem liên kết Fiddle] (http://jsfiddle.net/cmivxx/3EuZb/) – CMIVXX

+0

Như đã lưu ý trong các câu trả lời khác, điều này chỉ hoạt động cho lần đầu tiên ví dụ. Bạn nên sử dụng 'str = str.replace (/ -/g, '');' để thay thế tất cả các thể hiện của dấu gạch ngang. – iagreen

0
var str = "This-is-a-news-item-"; 
while (str.contains("-")) { 
    str = str.replace("-", ' '); 
} 
alert(str); 

tôi thấy rằng một sử dụng str.replace() sẽ chỉ thay thế gạch nối đầu tiên, vì vậy tôi looped qua trong khi chuỗi đầu vào vẫn chứa bất kỳ dấu gạch nối, và thay thế tất cả chúng.

http://jsfiddle.net/LGCYF/

0

Ngoài các câu trả lời đã đưa ra, bạn có thể muốn thay thế tất cả các lần xuất hiện. Để thực hiện việc này, bạn sẽ cần một cụm từ thông dụng như sau:

str = str.replace(/-/g, ' '); // Replace all '-' with ' ' 
Các vấn đề liên quan