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

Ger*_*ira 7 regex regex-greedy

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

match(/\href=".*?\/pdf\/.*?\.pdf/)
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗 ?

And*_*y E 6

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

match(/\href=".*?(\/pdf\/.*?\.pdf)/)[1]; 
Run Code Online (Sandbox Code Playgroud)

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


尝试使你的正则表达式更具体,而不仅仅是.*?它的匹配范围过于宽泛.例如:

match(/\href="([^"]+?\/pdf\/[^\.]+?\.pdf)"/)[1];
Run Code Online (Sandbox Code Playgroud)

[^"]+?将懒惰地匹配不包含双引号字符的字符串.这将限制匹配保持在引号内,因此匹配在以下字符串中不会太宽,例如:

<a href="someurl/somepage.html">Test</a><a href="dir/pdf/file.pdf">Some PDF</a>
Run Code Online (Sandbox Code Playgroud)