Всем доброго времени суток...
Помогите разобраться с регулярными выражениями в JavaScript,
в общей терминологии регулярок существует такой термин как
"группа с захватом" как правило это круглые скобки "
()", JavaScript судя по всему не исключение, но я никак не пойму как ограничить выборку именно этой самой группой с захватом, т.к. она вроде как и предназначена именно для этого. Читал, читал и вычитал, что вроде как многократный вызов *.exec решает эту головоломку... или я чего-то не понимаю, - или ничего он не решает.
Имеем мы следующее.
пусть мы поставили перед собой тривиальную задачу выдергивания чего либо МЕЖДУ (чаще всего показывают на примере извлечения содержимого тегов, давайте и мы поиграемся)
исходный текст:
Код:
|
<some>sdgsdgsd</some>\n<some>12312412</some> |
все казалось бы проще простого
var result;
var text = "<some>sdgsdgsd</some>\n</some>12312412</some>"
var pattern = /<some>(.*?)<\/some>/g
while ( (result = pattern.exec(text)) != null) {
alert("Найдено " + result[0] + ": ("+ result[1]+") и ("+result[2]+")")
alert("Дальше ищу с позиции "+result.lastIndex)
}
на выходе получаем что
exec нашел полное совпадение, и ограниченное группой с захватом, итого ДВА (мне не надо ДВА, мне надо то что я обозначил группой с захватом!), более того дальше он не пошел, и самоудовлетворился отискав "<some>sdgsdgsd</some>" и "sdgsdgsd"
Код:
|
result[0] = "<some>sdgsdgsd</some>"
result[1] = "sdgsdgsd"
result[2] = 'undefined'
result.lastIndex = 21 |
ПОЧЕМУ ?!