Показать сообщение отдельно
  #1 (permalink)  
Старый 01.06.2012, 15:06
Аспирант
Отправить личное сообщение для RUVATA Посмотреть профиль Найти все сообщения от RUVATA
 
Регистрация: 08.02.2011
Сообщений: 41

Регулярные выражения - получение только группы с захватом
Всем доброго времени суток...
Помогите разобраться с регулярными выражениями в 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
ПОЧЕМУ ?!
Ответить с цитированием