非贪婪正则表达式匹配、JavaScript 和 ASP

7

我需要进行非贪婪匹配,请帮忙。我的代码如下,使用的是 JavaScript 和 ASP。

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

上面的匹配模式可以匹配第一个href标签的开头。我需要它只匹配位于“/pdf/”文件夹中的最后一个href。
有什么想法吗?
1个回答

6
您需要使用捕获括号来匹配子表达式:
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>

这给我返回了 /pdf/filename.pdf,但是我需要获取<a href="somedirecrories/pdf/filename.pdf"。但是我正在从HTML代码中剥离链接,并且文档中有对其他更高层次的href的引用 - 所以我想我需要某种模式匹配。 - Gerald Ferreira
@Gerald:抱歉,我没有意识到那是你的意思。我已经更新了我的答案。 - Andy E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接