我試圖匹配HTML文檔中包含指向特定文件夾(不是PDF)的鏈接的所有href屬性。我無法得到它的匹配,我有一個獲得所有PDF:JS RegEx適用於除PDF之外的所有文件鏈接
var regexPDF = new RegExp('href=[\'|"](assets/.*?\.pdf)?[\'|"]','gi');
但我試圖排除PDF文件還沒有得到我很遠。有沒有辦法做我以後,或者我更好的只是匹配所有文件,然後使用條件語句來檢查它是否是PDF? TA!
達倫
我試圖匹配HTML文檔中包含指向特定文件夾(不是PDF)的鏈接的所有href屬性。我無法得到它的匹配,我有一個獲得所有PDF:JS RegEx適用於除PDF之外的所有文件鏈接
var regexPDF = new RegExp('href=[\'|"](assets/.*?\.pdf)?[\'|"]','gi');
但我試圖排除PDF文件還沒有得到我很遠。有沒有辦法做我以後,或者我更好的只是匹配所有文件,然後使用條件語句來檢查它是否是PDF? TA!
達倫
你可以嘗試最後4個字符之前使用負前瞻(?!..)
:
var regexPDF = new RegExp('href=[\'"](assets/(?:.*?(?!\.pdf).{4}|.{0,3}))?[\'"]','gi');
注意:你不需要在字符類使用|
,因爲它被認爲是as literal
負面模式是正則表達式不太擅長的東西。然而,你可以不喜歡以下:
var regexPDF = /[^.]*?\.(?!pdf)/gi;
// examples
"test.exe".match(regexPDF) // returns "test."
"test.pdf".match(regexPDF) // returns null
這樣做的缺點就是不顯示文件類型(如果你需要的結果),但會過濾所有PDF出來。它也會像test.pdf.bak
那樣在文件名中打破點(但是如果需要,你可以增強正則表達式來識別它)。
旁註:請勿使用正則表達式構造函數,而應使用普通正則表達式文字表示法/.../
。
不,我需要得到結果。爲什麼不使用構造函數? – iamdarrenhall
@dazhall使用構造函數通常不建議在javascript中(對於正則表達式,對象,數組,字符串)。您可以在濾除pdf後獲得完整的href。您不需要直接處理返回值,因此我認爲正則表達式不會返回該類型並不重要。 – Christoph