2012-07-15 111 views
2

如何使用Regex表達式數組並使用'exec'操作來迭代該數組。我做初始化各種正則表達式像這樣的數組:for循環,這是否通過Javascript中的正則表達式數組迭代遍歷

var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g); 

現在,我創建了一個:

for(i=0;i<arrRegex.length;i++){ 
    arrRegex[i].exec(somestring); 
} 

的事情是,這似乎並不工作。我不想使用它硬編碼是這樣的:

(/(http:\/\/(?:.*)\/)/g).exec(somestring); 

當使用陣列選項,「.exec」函數返回空值。當我使用硬編碼選項時,它會按照我的意願返回匹配項。

+0

該exec不會返回匹配,因爲它應該,但它與硬編碼。 matches = null – 2012-07-15 11:37:08

回答

2

exec()返回匹配,所以你應該能夠捕獲它。

somestring = 'http://stackoverflow.com/questions/11491489/iterate-through-regular-expression-array-in-javascript'; 
var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g); 
for (i = 0; i < arrRegex.length; i++) { 
    match = arrRegex[i].exec(somestring); 
} 

match是一個數組,結構如下:

{ 
    [0] = 'string matched by the regex' 
    [1] = 'match from the first capturing group' 
    [2] = 'match from the second capturing group' 
    ... and so on 
} 

看看這個的jsfiddle http://jsfiddle.net/HHKs2/1/

您還可以使用test()代替exec()exec() != null的簡寫。 test()將返回一個布爾變量,具體取決於正則表達式是否匹配字符串的一部分。

+0

我知道這一點,並且它在硬編碼時工作得很好,但是當我在你的代碼中使用正則表達式時,它會返回null。我在Chrome瀏覽器上使用它 – 2012-07-15 11:50:53

+0

看看我發佈的jsFiddle鏈接,它使用數組方式並返回結果。或者你是指從字符串初始化表達式?順便說一句,你也可以使用'test()'而不是'exec()'作爲'exec()!= null'的縮寫。 'test()'將返回一個布爾變量,取決於正則表達式是否匹配字符串的一部分。 – Dreen 2012-07-15 11:55:21

+0

如果你所說的是正確的,那麼這裏的測試如何返回false:http://jsfiddle.net/IdanShechter/uLMBL/ – 2012-07-15 12:08:57

1

什麼你可能想要做的是拍攝第一組:

for(i=0;i<arrRegex.length;i++){ 
    var someotherstring = arrRegex[i].exec(somestring)[1]; 
    // do something with it ... 
} 

BTW:那是我的猜想,不知道你正在嘗試做的。但是,如果您嘗試獲取URL的主機名,則應使用/(http:\/\/(?:.?)\/)/g.*之後的問號使前面的量詞(*)不合格。

+0

test()函數如何返回false,它應該返回true,因爲有匹配http:/ /jsfiddle.net/IdanShechter/uLMBL/ – 2012-07-15 12:12:57

+0

那麼,你的代碼在這裏工作 - 即使在Chrome中。你能否給我們多一點上下文,比如'exec()'結果的左邊賦值。或者您可以提供您正在使用的實際相關代碼。 – 2012-07-15 13:55:56