Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Способ реализации позитивного просмотра в перед в регулярном выражении (https://javascript.ru/forum/misc/27374-sposob-realizacii-pozitivnogo-prosmotra-v-pered-v-regulyarnom-vyrazhenii.html)

kichSman 11.04.2012 13:02

Способ реализации позитивного просмотра в перед в регулярном выражении
 
Собственно вот вопрос,
есть строка такого типа:
Код:

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

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

достает строку целиком, т.е. вместе с "js-modul-"
как быть, что делать - не знаю, а повторный перебор найденного не очень хочется костылить.

nerv_ 11.04.2012 13:40

можно так
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' ) );

kichSman 11.04.2012 13:43

Цитата:

Сообщение от nerv_ (Сообщение 168279)
можно так
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' ) );

спасиб за код, но вот цикла то как раз и хотелось избежать. Хотелось обойтись только регулярным выражением, подобием как на других языках

kichSman 11.04.2012 14:13

Цитата:

Сообщение от nasqad (Сообщение 168282)
...

Вот спасибо, мне надо было внимательнее читать callback в replace

kichSman 11.04.2012 14:16

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 168284)
nasqad,
я вот тоже не понмиаю нафига "не запоминать этой подстроки" если можно калбаком заменять а не реплейсом.

Затем, что на исходную строку побарабану, она обрабатывается один раз (размещена информационно). Из нее просто нужно достать без лишнего, а не заменять.

kichSman 11.04.2012 14:51

Цитата:

Сообщение от Maxmaxmахimus
и зачем тебе реплейс, ведь это такой же цикл.

Затем, что я ленивый и не прочитал про callback replace.
И надеялся, что в js есть какое нибудь подобие положительного просмотра вперед с выводом результата в виде массива через match

kichSman 11.04.2012 15:03

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 168299)
не, реги в яваскрипте говенные

я это уже понял, но лучше сказать, что ограниченные

Pavel M. 11.04.2012 16:48

Цитата:

Сообщение от 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);

Kolyaj 11.04.2012 17:09

Цитата:

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

Вам, судя по вашему описанию нужен просмотр назад, которого в JS нет. А просмотр вперёд как раз есть.

Цитата:

Сообщение от Maxmaxmахimus
не, реги в яваскрипте говенные

Что в них говёного, кроме отсутствия просмотра назад, без которого всегда можно обойтись?

Kolyaj 11.04.2012 17:29

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

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


Часовой пояс GMT +3, время: 06:35.