2015-12-12 31 views
14

Tôi có một chuỗi là "1,23,45,448.00" và tôi muốn thay thế tất cả dấu phẩy theo dấu thập phân và tất cả dấu thập phân bằng dấu phẩy.Thay thế, (dấu phẩy) theo. (Dấu chấm) và. (Dấu chấm) theo, (dấu phẩy)

sản lượng yêu cầu của tôi là "1.23.45.448,00"

Tôi đã cố gắng để thay thế , bởi . như sau:

var mystring = "1,23,45,448.00" 
alert(mystring.replace(/,/g , ".")); 

Nhưng, sau đó, nếu tôi cố gắng thay thế . bởi , nó cũng thay thế đầu tiên thay thế . bởi , kết quả trong việc đưa ra các đầu ra như "1,23,45,448,00"

+0

Thì sao? Điều gì không hiệu quả với bạn? –

+0

@AdamAzad Khi lần đầu tiên thay thế '.' (_or comma_) sẽ làm cho thay thế khác hoàn nguyên thay thế đầu tiên. – Tushar

+1

@Tushar, các chi tiết này phải có mặt trong câu hỏi, thay vì trong nhận xét. Câu hỏi chất lượng tốt nên mô tả vấn đề đủ tốt mà không cần thêm ** cần thiết ** vào chi tiết sự cố trong nhận xét. Một dòng mô tả tốt là để nói ** 1) những gì tôi muốn xảy ra ** sau đó ** 2) những gì tôi đang làm ** và cuối cùng ** 3) những gì thực sự xảy ra ** –

Trả lời

16

Sử dụng replace với chức năng gọi lại sẽ thay thế , theo .. bởi ,. Giá trị trả về từ hàm sẽ được sử dụng để thay thế giá trị được so khớp.

var mystring = "1,23,45,448.00"; 
 

 
mystring = mystring.replace(/[,.]/g, function (m) { 
 
    // m is the match found in the string 
 
    // If `,` is matched return `.`, if `.` matched return `,` 
 
    return m === ',' ? '.' : ','; 
 
}); 
 

 
console.log(mystring); 
 
document.write(mystring);

Regex: Các regex [,.] sẽ phù hợp với bất kỳ một trong những dấu phẩy hoặc dấu thập phân.

String#replace() với chức năng gọi lại sẽ nhận được trận đấu như tham số (m) là một trong hai , hoặc . và giá trị được trả về từ hàm được sử dụng để thay thế đấu.

Vì vậy, khi lần đầu tiên , từ chuỗi là lần xuất hiện

m = ','; 

Và trong hàm return m === ',' ? '.' : ',';

tương đương như

if (m === ',') { 
    return '.'; 
} else { 
    return ','; 
} 

Vì vậy, về cơ bản này được thay thế , bởi .. bởi , trong chuỗi.

+0

Bạn có thể giải thích thêm những gì đang xảy ra trong dòng này: 'return m === ','? '.':', '; ' – digglemister

+0

@snookieordie, xem [this] (http://stackoverflow.com/a/8897859/2151050) cho tương lai. –

+0

@snookieordie Khi m == ',' tại thời điểm đó nó sẽ được thay thế thành '.' khác khôn ngoan ',' sẽ được chấp nhận. '?' điều hành có điều kiện. – RajeeshMenoth

3

Không có gì sai với cách tiếp cận Tushar, nhưng đây là một ý tưởng:

myString 
    .replace(/,/g , "__COMMA__") // Replace `,` by some unique string 
    .replace(/\./g, ',')   // Replace `.` by `,` 
    .replace(/__COMMA__/g, '.'); // Replace the string by `.` 
Các vấn đề liên quan