2012-05-15 74 views
213

Tôi có một chuỗi với nhiều dấu phẩy, và chuỗi thay thế phương pháp sẽ chỉ thay đổi đầu tiên:Javascript - Thay thế tất cả dấu phẩy trong một chuỗi

var mystring = "this,is,a,test" 
mystring.replace(",","newchar", -1) 

quả: "thisnewcharis,a,test"

Các tài liệu chỉ ra rằng mặc định thay thế tất cả, và rằng "-1" cũng chỉ ra để thay thế tất cả, nhưng nó không thành công. Có suy nghĩ gì không?

+1

Tài liệu nào? Tiêu chuẩn - http://es5.github.com/#x15.5.4.11 - không xác định tham số thứ ba và MDN - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/ thay thế - xác định tham số thứ ba không chuẩn dưới dạng chuỗi đại diện cho cờ, không phải là số nguyên ... –

Trả lời

457

Bạn có thể sử dụng RegExp với cờ g.

var mystring = "this,is,a,test" 
mystring.replace(/,/g , "newchar"); 

DEMO:http://jsfiddle.net/d4N9s/

+1

Câu trả lời hay./g làm cho tìm kiếm toàn cầu của dấu phẩy và thay thế nó trong toàn bộ chuỗi. Nó hoạt động theo cách này, Tôi có đúng không ?? –

+0

Bạn có thể mô tả chi tiết liên quan đến/"Trình thu thập dữ liệu"/g – MSTdev

+1

@MSTdev Đây là một biểu thức chính quy * thông thường * với cờ 'g' (tìm kiếm toàn cầu * '*) hay không. Thuật toán rất đơn giản: biểu thức chính quy tìm TẤT CẢ các kết quả phù hợp (ở đây dấu phẩy) trong chuỗi đã cho. Thông tin thêm về các biểu thức chính quy trong JavaScript bạn có thể tìm thấy trong [** MDN **] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags). – VisioN

29
var mystring = "this,is,a,test" 
mystring.replace(/,/g, "newchar"); 

Sử dụng toàn cầu (g) cờ

Simple DEMO

+0

không hoạt động cho var mystring = "this, is.a.test" mystring.replace (/./ g, ">"); Nó thay thế toàn bộ chuỗi –

+0

@DineshJain Trong regex dot ('.') có một ý nghĩa đặc biệt, nó có nghĩa là mỗi char, và giống như tất cả các ký tự đặc biệt khác, cần phải được thoát bằng' \ 'nếu bạn muốn sử dụng giá trị của chúng" ". nếu bạn chỉ muốn thay thế các dấu chấm, bạn cần sử dụng '\ .'. – gdoron

+0

tôi thêm String.prototype.replaceAll = function (tìm kiếm, thay thế) { \t \t \t \t \t \t \t var target = này; \t \t \t \t \t \t \t trả về target.replace (new RegExp (tìm kiếm, 'g'), thay thế); \t \t \t \t \t \t}; giải quyết vấn đề của tôi @gdoron Cảm ơn –

107

Just for fun:

var mystring = "this,is,a,test" 
var newchar = '|' 
mystring = mystring.split(',').join(newchar); 
+0

Điều này hoạt động với Regex, globaly, với các biến và ký tự đặc biệt (ví dụ: '[' + variable + ']'). Thiên tài. –

+0

đó là một câu trả lời hay, tôi đã thử nghiệm hàm 'replace' với dấu chấm '.'nhưng nó không hoạt động như mong đợi, nhưng bạn trả lời làm cho nó tốt –

+1

@SrednyMCasanova đó là bởi vì trong regex, khoảng thời gian là một ký tự đặc biệt, và bạn nên thoát nó bằng '\ .' Ví dụ:' var mystring = " .,. is.,. a.,. test "; mystring.replace (/\./ g, "|"); 'Xem [MDN RegExp - Ký tự đặc biệt có nghĩa là trong cụm từ thông dụng] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp # Special_characters_meaning_in_regular_expressions) –

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