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

时间:2010-03-11 12:53:34

标签: regex regex-greedy

我需要做一场非贪婪的比赛,并希望有人能帮助我。我有以下内容,我正在使用JavaScript和ASP

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

上述匹配匹配href标记的第一个开头。我需要它只匹配作为/pdf/文件夹一部分的最后一个href。

任何想法?

1 个答案:

答案 0 :(得分:6)

您需要使用捕获括号进行子表达式匹配:

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

匹配将返回一个数组,其中整个匹配位于索引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>