Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ПРОБЛМА С RegEXP (https://javascript.ru/forum/misc/24627-problma-s-regexp.html)

Livaanderiamarum 08.01.2012 03:38

ПРОБЛМА С RegEXP
 
КАК найти что-то ПЕРЕД чем стоит определенный символ, но НЕ захватить этот символ?

Livaanderiamarum 08.01.2012 04:30

Ну, кроме как взять все, кроме этого символа, в скобочки

на самом деле я соврал что изучал регулярки) вчера ночью начал учить по ссылкам что дали.
пишу вот для теста регулярку ищущую ссылки на youtube на форуме и заменяющую эти ссылки роликами.

var reg = /(?:\s|^)(?:http:\/\/www\.|https:\/\/www\.|www\.)?youtube.com\/watch\?\S*v=(\S*?)(?:\s|&\S*|$)/


она захватывает первый пробел если он там есть, и захватывает последний пробел если после айдишника видео v=apdwyVW0HnE не идет знака &

как избавится от этого?

nerv_ 08.01.2012 15:46

Цитата:

Сообщение от Livaanderiamarum
КАК найти что-то ПЕРЕД чем стоит определенный символ, но НЕ захватить этот символ?

Хороший вопрос) Я уже задавал себе аналогичный. Думаю, не как :) Может кто из профи ответит иначе...

monolithed 08.01.2012 16:00

Цитата:

Сообщение от nerv_
Думаю, не как

alert('foo|bar'.match(/\|(\w+)/)[1]);

Livaanderiamarum 08.01.2012 16:09

Цитата:

Сообщение от monolithed (Сообщение 148872)
alert('foo|bar'.match(/\|(\w+)/)[1]);

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

/ (?:\s | -) (?: коты)/ например как мне заменить ТОЛЬКО слово коты не затронув пробел перед ним?
потому что может быть либо пробел либо тире! которые не должны трогаться. неужели придется сохранять еще одну группу?

/ (\s | -) (?: коты)/ заменяем "$1страусы" типа того? А это не сильно нагружает комп?

monolithed 08.01.2012 16:48

Цитата:

Сообщение от Livaanderiamarum
ну и попробуй теперь замени bar не затронув палочку перед ним?

смотря в каком контексте, например так:
alert('foo|bar'.replace(/\w+(?=$)/g, 'foo'));

ну и так далее, главное чтобы было от чего оттолкнуться

Livaanderiamarum 08.01.2012 17:07

так, я что-то не уловил при чем входные данные)) ты оттолкнулся от того что СТРОКА КОНЧАЕТСЯ)?
ну давай сделаем боевые условия

" |bar &bar "

var str = '   |bar     &bar  '
alert( str.replace(  /(\|)(bar)\s/g,     '$1foo')         );

Livaanderiamarum 08.01.2012 17:16

Иными словами НЕ ЗАТРОНУТЬ ЭТОТ ПЕРЕДНИЙ СИМВОЛ никак, мы можем его только ПЕРЕЗАПИСАТЬ ТАКИМ-ЖЕ)))

monolithed 08.01.2012 17:18

alert('папра 5 foo|bar 54 тиапт апк4'.replace(/\w+(?=\s\d)/, 'foo'));

Livaanderiamarum 08.01.2012 17:19

Цитата:

Сообщение от monolithed (Сообщение 148884)
alert('папра 5 foo|bar 54 тиапт апк4'.replace(/\w+(?=\s\d)/, 'foo'));

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


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