Tôi thực sự khuyến khích bạn sử dụng dạng chức năng String.replace() để giải quyết vấn đề của bạn, thay vì cố gắng parametrize regexp trong vòng lặp lặp lại trên {0}, {1}, v.v.
Nói cách khác, thay vì tìm kiếm '{0}' hoặc '{1}', chỉ cần tìm '{([0-9] +)}' (tức là {} xung quanh một số tùy ý, và chuyển một hàm vào hàm replace() để thay thế các biểu thức này một cách thông minh dựa trên số giữa các ký tự {}. Điều này cho phép bạn sử dụng một ký tự RegExp mà bạn có thể viết là/{([0-9] +)}/. chứ không lộn xộn xung quanh với các nhân vật thoát trong chuỗi
Something như thế này:
s='the song says {0} little {1} little {2} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{return args[(+firstmatch)]; }
);
trong đó sản lượng
the song says zero little one little two little-endians
Xem điều này similar question.
chỉnh sửa: nếu bạn muốn để lại các mặt hàng mình có lớn hơn chiều dài của danh sách args
của bạn, hãy chắc chắn để sanity-kiểm tra số tham số:
s='the song says {0} little {1} little {2} little-endians,\n'+
' {3} little {4} little {5} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{var i = +firstmatch; return i < args.length ? args[i] : wholematch;}
);
trong đó sản lượng
the song says zero little one little two little-endians,
{3} little {4} little {5} little-endians
Nguồn
2009-01-28 15:48:14
@casperOne, trùng lặp là gì? Cả [câu hỏi này] (http://stackoverflow.com/questions/4029109/javascript-regex-how-to-put-a-variable-inside-a-regular-expression) cũng không phải [câu hỏi này] (http: // stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular-expression-javascript) giống như câu hỏi này. Câu hỏi này rất quan trọng vì nó cho thấy thực sự trộn một biến chuỗi thành một mẫu regex, trong khi câu trả lời của các câu hỏi khác chỉ cung cấp các ví dụ trong đó các ký tự thoát không phải là một vấn đề. – MandM