Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2010, 18:14
Новичок на форуме
Отправить личное сообщение для bandolero Посмотреть профиль Найти все сообщения от bandolero
 
Регистрация: 30.01.2010
Сообщений: 5

Проблема с кавычкой в регулярном выражении
Товарищи!
Необходимо проанализировать выражение вида
<img id="someId" src="somePlace/someImage.jpg" height="xxx" width="xxx">

с тем, чтобы поменять путь somePlace на некоторый другой.
Если использовать выражение
/(src=['"])[^'"]*(?=\/[a-z0-9_]+\.[jpg|png|gif])/gi,

все работает как положено. Однако если добавить кавычку в конец выражения любым из следующих образов:
/(src=['"])[^'"]*(?=\/[a-z0-9_]+\.[jpg|png|gif])"/gi,
/(src=['"])[^'"]*(?=\/[a-z0-9_]+\.[jpg|png|gif]")/gi,

регулярное выражение перестает искаться.
При этом парадокс в том, что, если кавычку поставить прямо за расширениями файлов:
/(src=['"])[^'"]*(?=\/[a-z0-9_]+\.[jpg"|png"|gif"])/gi,

выражение ищется нормально.

Очень хочется разобраться, в чем же тут дело.
Ответить с цитированием
  #2 (permalink)  
Старый 30.01.2010, 18:27
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от bandolero
[jpg|png|gif]
здесь должны быть круглые скобки, иначе будет выполнен поиск символов: j, p, g, p, n, i, f и |
Ответить с цитированием
  #3 (permalink)  
Старый 30.01.2010, 19:28
Новичок на форуме
Отправить личное сообщение для bandolero Посмотреть профиль Найти все сообщения от bandolero
 
Регистрация: 30.01.2010
Сообщений: 5

Попробовал так:
/(src=['"])[^'"]*(?=\/[a-z0-9_]+\.[(jpg)|(png)|(gif)])/gi
и проверил так:
/(src=['"])[^'"]*(?=\/[a-z0-9_]+\.([(jpg)|(png)|(gif)]))/gi.
На примере jpg увидел, что захватывается только одна буква j. Судя по всему, группировать надо как-то по-другому. Пробовал вариант без захвата выражения в скобках (?:something), но не помогло.
Кроме того, проблема с кавычкой осталась...
Ответить с цитированием
  #4 (permalink)  
Старый 30.01.2010, 20:02
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Зачем вы квадратные скобки ставите?
Ответить с цитированием
  #5 (permalink)  
Старый 30.01.2010, 20:45
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

попробуй так
var str = '<img id="someId" src="somePlace/someImage.jpg" height="xxx" width="xxx">';
alert(/(src=(['"])([^'"]*)\/\w+?\.(jpg|png|gif)\2)/gi.exec(str)[3])
var str = '<img id="someId" src="somePlace2/someImage.png" height="xxx" width="xxx">';
alert(/(src=(['"])([^'"]*)\/\w+?\.(jpg|png|gif)\2)/gi.exec(str)[3])
var str = '<img id="someId" src="somePlace3/someImage.gif" height="xxx" width="xxx">';
alert(/(src=(['"])([^'"]*)\/\w+?\.(jpg|png|gif)\2)/gi.exec(str)[3])

Последний раз редактировалось PeaceCoder, 30.01.2010 в 20:48.
Ответить с цитированием
  #6 (permalink)  
Старый 31.01.2010, 11:37
Новичок на форуме
Отправить личное сообщение для bandolero Посмотреть профиль Найти все сообщения от bandolero
 
Регистрация: 30.01.2010
Сообщений: 5

Сообщение от Kolyaj Посмотреть сообщение
Зачем вы квадратные скобки ставите?
Я думал, что в случае логического "или" всегда надо ставить квадратные скобки, независимо от того, идет ли речь об отдельных символах [xyz] или о группах символов [(xy)|z]. Теперь благодаря PeaceCoder понял, что квадратные скобки во втором случае не нужны.
Спасибо всем за помощь!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с jQuery. Beck jQuery 2 26.08.2009 19:08
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47
Проблема с маркером kostian02 Общие вопросы Javascript 0 23.06.2008 16:10