2010-03-11 88 views
7

我需要做一個非貪婪的匹配,並希望有人能幫助我。我有以下,我正在使用JavaScript和ASP非貪婪的正則表達式匹配,JavaScript和ASP

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

上述匹配匹配href標記的第一個開始。我需要它只匹配/pdf/文件夾中最後一個href。

有什麼想法?

回答

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> 
+0

這讓我/pdf/filename.pdf,但我需要獲得<一個href =「somedirecrories/pdf /文件.pdf」但我剝離鏈接從HTML代碼,並有文件中更高的其他href的引用 - 所以我想我需要某種模式匹配 – 2010-03-11 13:08:33

+0

@Gerald:對不起,我沒有意識到這就是你的意思。我已經更新了我的答案。 – 2010-03-11 13:50:46

+0

完全符合我的要求 - 謝謝Andy – 2010-03-11 14:07:32