7

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

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

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

有任何想法吗 ?

4

1 回答 1

6

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

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

Match 将返回一个包含索引 0 处的整个匹配项的数组,所有子表达式捕获将按照它们匹配的顺序添加到数组中。在这种情况下, index1包含匹配的部分\/pdf\/.*?\.pdf


尝试使您的正则表达式更加具体,而不仅仅是.*?匹配过于广泛。例如:

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

[^"]+?将延迟匹配不包含双引号字符的字符串。这会将匹配限制在引号内,因此匹配在以下字符串中不会太宽泛,例如:

<a href="someurl/somepage.html">Test</a><a href="dir/pdf/file.pdf">Some PDF</a>
于 2010-03-11T12:59:57.383 回答