Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2012, 03:38
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

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

Последний раз редактировалось Livaanderiamarum, 08.01.2012 в 04:04.
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2012, 04:30
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

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

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

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


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

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

Последний раз редактировалось Livaanderiamarum, 08.01.2012 в 05:50.
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2012, 15:46
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Livaanderiamarum
КАК найти что-то ПЕРЕД чем стоит определенный символ, но НЕ захватить этот символ?
Хороший вопрос) Я уже задавал себе аналогичный. Думаю, не как Может кто из профи ответит иначе...
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2012, 16:00
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от nerv_
Думаю, не как
alert('foo|bar'.match(/\|(\w+)/)[1]);
Ответить с цитированием
  #5 (permalink)  
Старый 08.01.2012, 16:09
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от monolithed Посмотреть сообщение
alert('foo|bar'.match(/\|(\w+)/)[1]);
ну и попробуй теперь замени bar не затронув палочку перед ним?
-----
я это сделать тоже могу, хочу посмотреть способ без извращений.
например

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

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

Последний раз редактировалось Livaanderiamarum, 08.01.2012 в 16:28.
Ответить с цитированием
  #6 (permalink)  
Старый 08.01.2012, 16:48
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Livaanderiamarum
ну и попробуй теперь замени bar не затронув палочку перед ним?
смотря в каком контексте, например так:
alert('foo|bar'.replace(/\w+(?=$)/g, 'foo'));

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

Последний раз редактировалось monolithed, 08.01.2012 в 16:51.
Ответить с цитированием
  #7 (permalink)  
Старый 08.01.2012, 17:07
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

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

" |bar &bar "

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

Последний раз редактировалось Livaanderiamarum, 08.01.2012 в 17:15.
Ответить с цитированием
  #8 (permalink)  
Старый 08.01.2012, 17:16
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Иными словами НЕ ЗАТРОНУТЬ ЭТОТ ПЕРЕДНИЙ СИМВОЛ никак, мы можем его только ПЕРЕЗАПИСАТЬ ТАКИМ-ЖЕ)))
Ответить с цитированием
  #9 (permalink)  
Старый 08.01.2012, 17:18
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

alert('папра 5 foo|bar 54 тиапт апк4'.replace(/\w+(?=\s\d)/, 'foo'));
Ответить с цитированием
  #10 (permalink)  
Старый 08.01.2012, 17:19
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от monolithed Посмотреть сообщение
alert('папра 5 foo|bar 54 тиапт апк4'.replace(/\w+(?=\s\d)/, 'foo'));
ну тут видешь саму суть регулярок не используешь, тебе зарание известна строка в которой будем искать, а этого быть не должно.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
regexp не работает экранирование точки Spice Общие вопросы Javascript 2 10.11.2011 13:41
evalScripts без regexp и eval Diem Events/DOM/Window 1 30.07.2009 17:34
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 16:35
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19