2012-07-06 63 views
2

所以我在尋找一個字符串{X}其中x是1-9之間的一些數字和我的正則表達式查找第一次出現,並運行的回調函數,但是這只是呼籲首次發現實例。例如,{2}中的部分{3}字符串將返回取決於括號之間的整數倍的替換值x號碼所以函數返回		Some{3}當我想它返回		Some			String正則表達式的回調函數只執行一次

我不知道很多的正則表達式,但沒有辦法,我需要的,以便對所有匹配的事件執行回調函數添加的東西?

下面的代碼

var string = "{2}Some{3}String"; 

function replaceWithTabs(propertyName) { 
    var regExp = new RegExp('\{[1-9]\}'); 
    function addTabs(match) { 

    var string = '', 
     i = 0, 
     length = match.substring(1,2); 

    for(i; i < length; i++) { 
     string += "&#09;"; 
    } 
    return string; 
} return propertyName.replace(regExp, addTabs); } 
+0

您沒有設置全局標誌。當使用RegExp對象時,需要第二個參數'g':RegExp('\ {[1-9] \}','g'); – 2017-01-10 03:22:00

回答

3

使用此RegExp文字來代替:

var regExp = /{[1-9]}/g; 

{}Regular Expression特殊符號這樣可以儘量避免斜線。 g RegExp的標誌表示global match,沒有這一點,您只會替換第一個匹配項,但不是全部匹配項。使用literal代替RegExp contstructor是首選,因爲它是faster.Also如果使用正則表達式的構造函數,你還需要轉義\符號,因爲斜槓是特殊符號​​。試想一下:

var regliteral = /\./; 
//Similar with constructor 
var regconstructor = new RegExp('\\.'); //slash is special symbol in string,so we add extra slash before it 
+0

是的,它的工作..但你可以請詳細說明嗎? – 2012-07-06 19:19:48

+0

@AndréPena我已經更新了我的答案。 – Engineer 2012-07-06 19:32:26

+0

啊好的..那是'g'然後:)。謝謝 – 2012-07-06 20:21:49