2013-06-12 33 views
6

Tôi đang mã hóa một chức năng tạo khuôn mẫu đơn giản trong javascript.JavaScript REGEX Đối sánh tất cả và thay thế

Tôi đã tải mẫu của mình tốt, bây giờ là phần khi tôi cần phân tích nội dung cho trình giữ chỗ.

một ví dụ về một mẫu là:

{{name}} is {{age}} 

Đây là những năng động, vì thế lý tưởng tôi muốn sử dụng regex để phù hợp và thay thế placeholders dựa trên tên của họ, ví dụ

{{name}} sẽ được thay thế bằng nội dung được tải trong một mảng javascript, ví dụ:

data.name 

data.age 

Đây là regex của tôi: /\{\{(.*?)\}\}/

này đang làm việc tốt, nhưng sau khi rất nhiều tìm kiếm tôi không thể tìm ra cách xác định lặp lại qua mỗi trận đấu regex.

Cảm ơn trước

+1

[Đây có phải là những gì bạn đang cố gắng thực hiện không?] (Https://github.com/janl/mustache.js) – Marty

+0

tương tự nhưng không chính xác. –

Trả lời

17

Vâng, trước tiên bạn sẽ cần g cờ trên regex. Điều này yêu cầu JavaScript thay thế tất cả giá trị khớp. Ngoài ra, bạn có thể cung cấp chức năng cho phương thức replace. Một cái gì đó như thế này:

var result = str.replace(/\{\{(.*?)\}\}/g, function(match, token) { 
    return data[token]; 
}); 

Tham số thứ hai khớp với nhóm con đầu tiên và cứ tiếp tục như vậy.

+1

+1 ... Đã gói mã của bạn vào một hàm và sử dụng eval để đánh giá các đối tượng đa cấp ... http://jsfiddle.net/hU7e2/ Có thể chạy mã tùy ý. Vì vậy hãy cẩn thận :) http://jsfiddle.net/hU7e2/1/ – Shanimal

4
var data = { 
    name: 'zerkms', 
    age: 42 
}; 

var str = '{{name}} is {{age}}'.replace(/\{\{(.*?)\}\}/g, function(i, match) { 
    return data[match]; 
}); 

console.log(str); 

http://jsfiddle.net/zDJLd/

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