2012-11-06 36 views
1

我正在使用JavaScript數據庫中的數據進行「mustache light」模板化。數據如下所示:RegExp針對混合文本/數字的頭疼

正如您在{{圖1-1}}中以及在{{圖1-2}}和{{1-3}}中所看到的,hozzfrazz很多比胡扯棒更清潔。

我的正則表達式是\{\{[-a-zA-Z0-9\s]+\}\}/gi,這在我的腦海裏捕捉到了上面所有的鬍鬚。但在我的功能中唯一被識別的是{{1-3}},而不是其他兩個。

任何幫助?

顯然,我需要增加我的功能爲好,因爲正則表達式的工作原理:

var mReg = new RegExp("\{\{[-a-zA-Z0-9\s]+\}\}"); 
var link_tpl = "<a href='#' rel='@$' class='questionImageLink'>@@</a>"; 
var html = ''; 
var i = 1; 
while (mReg.test(mText) === true) { 
    mText = mText.replace(mReg, function (f) { 
     var inner = f.substr(2, f.indexOf("}") - 2); 
     return link_tpl.replace("@@", inner).replace("@$", i); 
    }, "g"); 
    i++; 
} 
+2

如果你還記得,包括打開定界符它爲我'/'http://jsfiddle.net/JYrhm/ –

+3

你確定嗎?它似乎匹配所有這些:http://jsfiddle.net/4wyGG/ – Joe

+0

你使用'exec'?請記住在「做」的同時而不是之後。 –

回答

3

我會做這樣的,用更寬容的正則表達式和replace代替while一塌糊塗。

var re = /\{\{([^{}]+)\}\}/g; 
var results = []; 

str.replace(re, function(a, b) { results.push(b); }); 

console.log(results); //=> ['Figure 1-1', 'Figures 1-2', '1-3'] 

演示:http://jsfiddle.net/elclanrs/fE3U3/