Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.04.2012, 13:02
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

Способ реализации позитивного просмотра в перед в регулярном выражении
Собственно вот вопрос,
есть строка такого типа:
Код:
row_grid js-modul-autoScroll-x js-modul-autoScroll-y
нужно достать все слова имеющие "js-modul-", но не запоминать этой подстроки, а достать подстроку, которая идет после нее

пытался так:
var arr = this.match(/js-modul-(\S+)/g);

достает строку целиком, т.е. вместе с "js-modul-"
как быть, что делать - не знаю, а повторный перебор найденного не очень хочется костылить.
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2012, 13:40
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

можно так
var text = 'row_grid js-modul-autoScroll-x js-modul-autoScroll-y';
var re = /js-modul-(\S+)/g;
var arr = [];
var str;

while( str = re.exec( text ) ) {
	arr.push( str[ 1 ] );
}

alert( arr.join( '\n' ) );
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2012, 13:43
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

Сообщение от nerv_ Посмотреть сообщение
можно так
var text = 'row_grid js-modul-autoScroll-x js-modul-autoScroll-y';
var re = /js-modul-(\S+)/g;
var arr = [];
var str;

while( str = re.exec( text ) ) {
	arr.push( str[ 1 ] );
}

alert( arr.join( '\n' ) );
спасиб за код, но вот цикла то как раз и хотелось избежать. Хотелось обойтись только регулярным выражением, подобием как на других языках
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2012, 14:13
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

Сообщение от nasqad Посмотреть сообщение
...
Вот спасибо, мне надо было внимательнее читать callback в replace
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2012, 14:16
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

Сообщение от Maxmaxmахimus Посмотреть сообщение
nasqad,
я вот тоже не понмиаю нафига "не запоминать этой подстроки" если можно калбаком заменять а не реплейсом.
Затем, что на исходную строку побарабану, она обрабатывается один раз (размещена информационно). Из нее просто нужно достать без лишнего, а не заменять.
Ответить с цитированием
  #6 (permalink)  
Старый 11.04.2012, 14:51
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

Сообщение от Maxmaxmахimus
и зачем тебе реплейс, ведь это такой же цикл.
Затем, что я ленивый и не прочитал про callback replace.
И надеялся, что в js есть какое нибудь подобие положительного просмотра вперед с выводом результата в виде массива через match
Ответить с цитированием
  #7 (permalink)  
Старый 11.04.2012, 15:03
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

Сообщение от Maxmaxmахimus Посмотреть сообщение
не, реги в яваскрипте говенные
я это уже понял, но лучше сказать, что ограниченные
Ответить с цитированием
  #8 (permalink)  
Старый 11.04.2012, 16:48
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от kichSman
И надеялся, что в js есть какое нибудь подобие положительного просмотра вперед с выводом результата в виде массива через match
подумал, что можно эмулировать просмотр назад, которого нет в js, с помощью revers строки, а потом использовать просмотр вперед

получилось длинно, т.к. revers есть только у массивов
поэтому на преобразования строка - массив много действий

это не для практического использования :-)

var text = 'row_grid js-modul-autoScroll-x js-modul-autoScroll-y',
    
  arr = text.split('').reverse().join('')
    .match(/\S+(?=-ludom-sj)/g) // массив того что надо, используя просмотр вперед
    .join(' ').split('').reverse().join('').split(' ');

alert(arr);
Ответить с цитированием
  #9 (permalink)  
Старый 11.04.2012, 17:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от kichSman
И надеялся, что в js есть какое нибудь подобие положительного просмотра вперед с выводом результата в виде массива через match
Вам, судя по вашему описанию нужен просмотр назад, которого в JS нет. А просмотр вперёд как раз есть.

Сообщение от Maxmaxmахimus
не, реги в яваскрипте говенные
Что в них говёного, кроме отсутствия просмотра назад, без которого всегда можно обойтись?
Ответить с цитированием
  #10 (permalink)  
Старый 11.04.2012, 17:29
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Я не оправдываю отсутствие просмотра назад, я констатирую факт. В том же PHP просмотр назад хоть и есть, но недоделанный.

Ты не ответил на вопрос: регулярки говёные только из-за отсутствия просмотра назад?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите плагин или способ реализации bobri4 jQuery 4 27.11.2009 12:49