2016-03-24 86 views
2

我有這樣的字符串:簡單的JavaScript字符串提取

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

我想提取值{{}},我怎麼能做到這一點? 預期的結果是

["foo", "bar"] 

我試圖

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

但它不是如我所料工作。

+0

這是某種類型的模板嗎?你打算用什麼替換它們嗎? – georg

+0

@georg它來自模板,我正在做非常簡單的原型,我只需要從模板中提取所有變量。 –

回答

4

您應該使用exec在這樣的循環抓住全球標誌捕獲組在JS:

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

正則表達式是好的,只是用map剝離括號

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));