logic8
logic8

Reputation: 935

JS regex OR only picks first expression

I am trying to parse IDs, label text, and input types OR "textarea" from this string:

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>"

here is my regex:

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

and I'm executing like this:

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

here is the result:

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

the first and second cols are good, but the third is the result of the OR statement in my regex - (?:pe="(.+?)"|(textarea))

it will only capture the first expression.

The result in the second row is undefined because it is a "textarea". If I switch the expressions in the OR the "textarea" shows and the rest are undefined.

where did I go wrong?

Upvotes: 1

Views: 52

Answers (1)

Tim Pietzcker
Tim Pietzcker

Reputation: 336208

There are two capturing groups here:

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

Upvotes: 3

Related Questions