2012-01-04 18 views
5

私はスーパーシンプルなJavaScriptのテンプレートソリューションを作成しようとしていますと交換してください。 JavaScriptのreplaceメソッドを使用して、テンプレート内の中括弧のすべてのインスタンスを見つけ、適切なデータで置き換えたいと考えています。例えば検索とJavaScript

、私のテンプレートがされた場合:<p>My name is {{name}}. I am {{age}}.</p>

私は結果を望む:<p>My name is Olly. I am 19.</p>

はここで、これまでに私のコードです:​​

私はそれが自動的に各部分を交換しようとしています私はJavaScriptを明示的に伝える必要はありません。しかし、これは私が問題を抱えているところです。あなたが直接文字列を渡す場合

答えて

4

$1にのみ機能します。そしてperson["$1"]文字通りundefinedある - person["$1"]は文字列が.replaceに渡される前に評価されるので、それは、あなたがそれを持っているように動作しません。

あなたが代わりに関数を渡すことができます:http://jsfiddle.net/2RkAG/1/。この関数は各置換に対して呼び出され、引数が渡されます。 $1

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

最初に{をエスケープする必要はありません。

+0

どうもありがとうございました。それは最高です。私はそうのようなテンプレートを使用したい場合はどのような –

+0

と言うが、: '

私の名前は{{person.name}}。私は{{person.age}}です。

'私は 'eval'でこれを扱っていますが、これを行うにはこれが最善の方法ですか?安全?同様にそうです:http://jsfiddle.net/2RkAG/20/ –

+1

@Oliver Joseph Ash: 'eval'を望まないなら、あなたはいくつかの経路発見アルゴリズムが必要でしょう:http://jsfiddle.net/2RkAG/24 。 – pimvdb

関連する問題