2016-03-24 34 views
2

私はそのような文字列:単純なJavaScriptの文字列抽出

"{{foo}} is {{bar}}" 

Iから値を抽出したい{{}}、私はこれをどのように達成することができますか? 期待される結果は、私が

"{{foo}} is {{bar}}".match(/\{\{(.*?)\}\}/g) 

を試みたが、その私が期待どおりに動作しない

["foo", "bar"] 

です。

+0

ですか?それらを何かに置き換えるつもりですか? – georg

+0

@georgのテンプレートから、私はテンプレートからすべての変数を抽出するだけの非常に簡単なプロトタイプをやっています。 –

答えて

4

あなたはJSにグローバルフラグ付きキャプチャグループをつかむために、このようなループでexecを使用する必要がありますを取り除くためにmapを使用します。

var m; 
var re = /\{\{(.*?)\}\}/g 
var str = "{{foo}} is {{bar}}" 
var matches = []; 

while((m=re.exec(str)) != null) { 
    matches.push(m[1]); 
} 

console.log(matches); 
//=> ["foo", "bar"] 
+1

これは最高のソリューションです。正規表現を使用している場合は、それをジョブ全体に使用してください。あなたが正しい出力を得ていないので、文字列のマングリングに戻らないでください。 –

+0

@JamesThorpeそれは異なります。このソリューションは読み易さに欠けます。 – Lewis

+1

@Tresdinこれは実際には '.exec'の使い方を非常に簡単に実装したもので、見つかった値の事後操作は必要ありません。 –

1

正規表現は結構です、ちょうどかっこ

var output = "{{foo}} is {{bar}}".match(/\{\{(.*?)\}\}/g).map(function(value){ return value.substring(2,value.length-2) }); 
 
    document.body.innerHTML += output;

0

お試しください

これは、テンプレートのいくつかの種類

var arr = []; 
 
var str = "{{foo}} is {{bar}}" 
 
str.replace(/{{(.*?)}}/g, function(s, match) { 
 
          arr.push(match); 
 
         }); 
 

 
document.write('<pre>'+JSON.stringify(arr));