Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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
ПОЧЕМУ ?!
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2012, 15:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

var pattern = /<some>([^<]*)<\/some>/gm
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2012, 15:27
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

RUVATA, вот здесь похожая тема.
Ответить с цитированием
  #4 (permalink)  
Старый 01.06.2012, 15:30
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Если я правильно понял вам надо вытянуть текст из тегов (ваша эта задачка), я обычно это решаю методом объекта string - строка.match(Регулярка) я бы так это решил
var text = "<some>sdgsdgsd</some>\n<some>12312412</some>"
var pattern =  /<some>(.*)<\/some>/img;
if(pattern.test(text)==true) {
text2 = text.match(pattern);
i = text2.length;
for(k=0;k<i;k++){
text2[k]=text2[k].replace(/((<\/some>)|(<some>))/img,'')
alert("Найдено " + text2[k])
  }}

Последний раз редактировалось Dim@, 01.06.2012 в 15:59.
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2012, 16:24
Интересующийся
Отправить личное сообщение для weqq Посмотреть профиль Найти все сообщения от weqq
 
Регистрация: 17.05.2010
Сообщений: 15

У вас действительно так:
var text = "<some>sdgsdgsd</some>\n</some>12312412</some>"

?!

<some>sdgsdgsd</some>
- подходит.
</some>12312412</some>
- НЕ подходит..
Ответить с цитированием
  #6 (permalink)  
Старый 12.06.2012, 15:44
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

weqq,
нет вот ваша строка
var text = "<some>sdgsdgsd</some>\n</some>12312412</some>"

а вот моя (я просто хотел показать как находит и изменил </some> на <some>)
var text = "<some>sdgsdgsd</some>\n<some>12312412</some>"
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения, как пронумеровать совпавшие группы Casufi Общие вопросы Javascript 1 02.02.2012 19:12
Регулярные выражения и BackReference Liberg Общие вопросы Javascript 1 04.11.2011 06:28
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ ТОЛЬКО ЦИФРЫ Amateur Internet Explorer 3 19.06.2011 07:20
Регулярные выражения работают через раз San4ezy Общие вопросы Javascript 5 05.10.2010 01:50
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 12:35