Hãy để tôi giải quyết những theo thứ tự ngược:
Những gì tôi đang làm sai?
Bạn muốn sử dụng +
, không phải *
. *
có nghĩa là không hoặc nhiều hơn đối sánh, điều này không có ý nghĩa ở đây. +
có nghĩa là một hoặc nhiều hơn đối sánh. Vì vậy:
"aaa\nbbb\nccc".replace(/.+/g, ".")
// ".\n.\n."
Cũng lưu ý rằng nếu bạn không sử dụng ^
hay $
(ví dụ đầu tiên của bạn), bạn không cần sửa đổi m
(nhưng đó không phải là vấn đề với những gì bạn đã làm). Và bạn không cần ^
hoặc $
vì .
doesn't match newlines (điều mà tôi không biết trước khi trả lời câu hỏi này).
Tại sao javascript thay thế chức năng chuỗi làm điều này?
Tôi không có ý tưởng trần tục và hy vọng người khác làm.
Một lần nữa, bằng cách sử dụng *
, bạn đang nói số không hoặc nhiều hơn đối sánh. Vì vậy, nó phù hợp với tất cả các nhân vật có liên quan, thay thế chúng bằng dấu chấm đầu tiên; sau đó nó khớp với các ký tự số không, thay thế chúng bằng một dấu chấm. Kết quả: Hai dấu chấm.
Bằng chứng:
Live copy | Live source
"aaa\nbbb\nccc".replace(/.*/g, function(m) {
console.log("m = '" + m + "'");
});
Đầu ra:
m = 'aaa'
m = ''
m = 'bbb'
m = ''
m = 'ccc'
m = ''
Nguồn
2012-03-01 15:01:32
Tôi thích "Nguồn trực tiếp". Lời giải thích tuyệt vời. –
Giải thích tuyệt vời, điều này xứng đáng là + a_lot. Không biết rằng '.' cũng không khớp với dòng mới. –