2015-11-18 93 views
1

我想從這個字符串解析標識,標籤文本和輸入類型OR「文本區域」:JS正則表達式或只選擇第一個表達式

var test = "<li class="ui-state-default ui-sortable-handle"><label for="test1_1447826909520">test 1:</label> <input type="text" id="test1_1447826909520"></li><li class="ui-state-default ui-sortable-handle"><label for="test2_1447826918566">test 2:</label> <textarea id="test2_1447826918566" style="vertical-align:top;"></textarea></li><li class="ui-state-default ui-sortable-handle"><label for="test3_1447826926580">test 3:</label> <input type="number" id="test3_1447826926580"></li><li class="ui-state-default ui-sortable-handle"><label for="test4_1447826935118">test 4:</label> <input type="url" id="test4_1447826935118"></li><li class="ui-state-default ui-sortable-handle"><label for="test5_1447826944391">test 5:</label> <input type="email" id="test5_1447826944391"></li><li class="ui-state-default ui-sortable-handle"><label for="test6_1447826954174">test 6:</label> <input type="tel" id="test6_1447826954174"></li>" 

這裏是我的正則表達式:

var re = /r="(.+?)">(.+?):.+?(?:pe="(.+?)"|(textarea))/gi 

,我執行這樣的:

while ((matches = re.exec(test)) !== null) { 
    console.log(matches[1]+', '+matches[2]+', '+matches[3]); 
} 

這裏是結果:

test1_1447826909520, test 1, text 
test2_1447826918566, test 2, undefined // <--------- 
test3_1447826926580, test 3, number 
test4_1447826935118, test 4, url 
test5_1447826944391, test 5, email 
test6_1447826954174, test 6, tel 

第一和第二的cols都不錯,但第三個是我的正則表達式或語句的結果 - (?:pe="(.+?)"|(textarea))

只會擷取第一個表達式。

第二行的結果是未定義的,因爲它是「textarea」。如果我在OR中切換表達式,那麼「textarea」會顯示,其餘的都是未定義的。

我哪裏出錯了?

回答

3

有捕獲組在這裏:

(?:pe="(.+?)"|(textarea)) 
group 3-^  ^-group 4 
+0

是的 - 謝謝!我認爲OR只會成爲第三組。再次感謝 – logic8