проблема с именованным захватом в регулярном выражении Javascript - PullRequest
0 голосов
/ 19 апреля 2010

У меня есть следующее регулярное выражение, которое прекрасно работает в конструкторе регулярных выражений Rad Software.

param\s+name\s*=\s*"movie"\s+value=\s*"(?<target>.*?)"

А теперь мне интересно, как заставить это работать в JavaScript. Он продолжает жаловаться на «целевую» часть. Я пытаюсь подтвердить и получить URL-адрес из кода для вставки YouTube.

<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/ueZP6ifzqMY&hl=sv_SE&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ueZP6ifzqMY&hl=sv_SE&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>

Как, черт возьми, я могу заставить это регулярное выражение работать с моим JavaScript?

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Если у вас уже есть JS-фреймворк, такой как jQuery, на вашем сайте, я рекомендую использовать его вместо регулярных выражений:

var movieUrl = $(your_html).find("object param[name=movie]").attr("value");
// "http://www.youtube.com/v/ueZP6ifzqMY&hl=sv_SE&fs=1&rel=0"

Также есть способы сделать что-то подобное с чистым DOM JavaScript (если у вас нет фреймворка). Они приводят к немного большему количеству кода, чем регулярные выражения, но их легче поддерживать и с меньшей вероятностью не удастся выполнить.

3 голосов
/ 19 апреля 2010

Javascript не имеет именованного захвата. Используйте

param\s+name\s*=\s*"movie"\s+value=\s*"(.*?)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...