Не жадное соответствие регулярным выражениям, JavaScript и ASP - PullRequest
7 голосов
/ 11 марта 2010

Мне нужно сделать не жадный матч и надеяться, что кто-нибудь может мне помочь.У меня есть следующее, и я использую JavaScript и ASP

match(/\href=".*?\/pdf\/.*?\.pdf/)

Приведенное выше совпадение соответствует первому началу тега href.Мне нужно, чтобы он совпадал только с последним href, который является частью папки /pdf/.

Есть идеи?

1 Ответ

6 голосов
/ 11 марта 2010

Для совпадений подвыражений необходимо использовать круглые скобки:

match(/\href=".*?(\/pdf\/.*?\.pdf)/)[1]; 

Функция Match возвращает массив со всем соответствием с индексом 0, все захваты подвыражений будут добавляться в массив в порядкеони совпали.В этом случае индекс 1 содержит раздел, соответствующий \/pdf\/.*?\.pdf.

Попробуйте сделать ваше регулярное выражение более конкретным, чем просто .*?, если оно слишком широкое.Например:

match(/\href="([^"]+?\/pdf\/[^\.]+?\.pdf)"/)[1];

[^"]+? будет лениво соответствовать строке символов, которая не содержит символ двойной кавычки.Это ограничит совпадение нахождением в кавычках, поэтому совпадение не будет слишком широким в следующей строке, например:

<a href="someurl/somepage.html">Test</a><a href="dir/pdf/file.pdf">Some PDF</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...