我有這樣的字符串:簡單的JavaScript字符串提取
"{{foo}} is {{bar}}"
我想提取值{{}},我怎麼能做到這一點? 預期的結果是
["foo", "bar"]
我試圖
"{{foo}} is {{bar}}".match(/\{\{(.*?)\}\}/g)
但它不是如我所料工作。
我有這樣的字符串:簡單的JavaScript字符串提取
"{{foo}} is {{bar}}"
我想提取值{{}},我怎麼能做到這一點? 預期的結果是
["foo", "bar"]
我試圖
"{{foo}} is {{bar}}".match(/\{\{(.*?)\}\}/g)
但它不是如我所料工作。
您應該使用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"]
這是發佈的最佳解決方案 - 如果您使用的是正則表達式,請將其用於整個工作。不要因爲沒有得到正確的輸出而退回到串擾。 –
@JamesThorpe它取決於。該解決方案在可讀性方面失敗。 – Lewis
@Tresdin不是真的 - 這是一個非常直接的實現,如何使用'.exec',並且不需要對找到的值進行後處理。 –
正則表達式是好的,只是用map
剝離括號
var output = "{{foo}} is {{bar}}".match(/\{\{(.*?)\}\}/g).map(function(value){ return value.substring(2,value.length-2) });
document.body.innerHTML += output;
試試這個
var arr = [];
var str = "{{foo}} is {{bar}}"
str.replace(/{{(.*?)}}/g, function(s, match) {
arr.push(match);
});
document.write('<pre>'+JSON.stringify(arr));
這是某種類型的模板嗎?你打算用什麼替換它們嗎? – georg
@georg它來自模板,我正在做非常簡單的原型,我只需要從模板中提取所有變量。 –