2012-01-04 48 views
5

Tôi đang cố tạo một giải pháp tạo mẫu JavaScript siêu đơn giản. Tôi muốn sử dụng phương thức JavaScript replace để tìm tất cả các phiên bản của dấu ngoặc nhọn trong mẫu và thay thế chúng bằng dữ liệu thích hợp của chúng.Tìm và thay thế bằng JavaScript

Ví dụ, nếu mẫu của tôi là: <p>My name is {{name}}. I am {{age}}.</p>

tôi muốn kết quả: <p>My name is Olly. I am 19.</p>

Dưới đây là mã của tôi cho đến nay: http://jsfiddle.net/2RkAG/

Tôi đang cố gắng để làm cho nó tự động thay thế từng mảnh dữ liệu, vì vậy tôi không phải nói rõ ràng cho JavaScript những gì cần thay thế. Tuy nhiên, đây là nơi tôi đang gặp vấn đề.

Trả lời

4

$1 chỉ hoạt động nếu bạn chuyển trực tiếp chuỗi. Nó không hoạt động theo cách bạn có, bởi vì person["$1"] được đánh giá trước khi chuỗi được chuyển đến .replace - và person["$1"] theo nghĩa đen là undefined.

Bạn có thể chuyển một hàm thay vì: http://jsfiddle.net/2RkAG/1/. Hàm này được gọi cho mỗi thay thế và có đối số được truyền tương đương với ví dụ: $1.

$result.html(template.replace(/{{(.*?)}}/g, function(a, b) { 
    return person[b]; // a = complete match, b = first group 
})); 

Bạn cũng không cần thoát khỏi số { đầu tiên.

+0

Cảm ơn rất nhiều. Đó là hoàn hảo. –

+0

Nói, nếu tôi muốn sử dụng mẫu như vậy: '

Tên tôi là {{person.name}}. Tôi là {{person.age}}.

'. Tôi đã làm việc này với 'eval', nhưng đây có phải là cách tốt nhất để làm điều này không? An toàn? Giống như vậy: http://jsfiddle.net/2RkAG/20/ –

+1

@Oliver Joseph Ash: Bạn cần một số thuật toán tìm đường nếu bạn không muốn 'eval': http://jsfiddle.net/2RkAG/24 . – pimvdb

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