Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с кавычкой в регулярном выражении (https://javascript.ru/forum/misc/7408-problema-s-kavychkojj-v-regulyarnom-vyrazhenii.html)

bandolero 30.01.2010 18:14

Проблема с кавычкой в регулярном выражении
 
Товарищи!
Необходимо проанализировать выражение вида
<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,

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

Очень хочется разобраться, в чем же тут дело.

Octane 30.01.2010 18:27

Цитата:

Сообщение от bandolero
[jpg|png|gif]

здесь должны быть круглые скобки, иначе будет выполнен поиск символов: j, p, g, p, n, i, f и |

bandolero 30.01.2010 19:28

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

Kolyaj 30.01.2010 20:02

Зачем вы квадратные скобки ставите?

PeaceCoder 30.01.2010 20:45

попробуй так
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])

bandolero 31.01.2010 11:37

Цитата:

Сообщение от Kolyaj (Сообщение 42844)
Зачем вы квадратные скобки ставите?

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


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