我正在嘗試從在實際鏈接之前具有“卷”、“卷 1”或“卷 1:”的網站中提取所有鏈接。目前使用我擁有的代碼(請查看下方),它將獲取所有鏈接,包括圖片、表情符號和其他內容。
注意:現在,它只是選擇鏈接而不關注標簽或任何東西,但如果我要檢查“音量”或類似內容,我還需要檢查標簽(例如第 1 卷<a href='liink'>)
可用于測驗的頁面:0、1、2
目前,我有這個代碼:
const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\ ~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\ .~#?&\/\/=]*)/g;
document.querySelector(".inner").outerHTML.match(urlRegex);
它選擇inner元素并將其所有 HTML 轉換為字串。然后它將嘗試決議字串中的所有鏈接。但它還包括除了實際資料(卷)之外我不想要的所有圖片和其他東西。
如果您對我想要的東西感到困惑,那么例如,我們有這個:
<br>volume 1 <a ... /a><br>
<br>image <a ... /a><br>
我只想獲得第 1 卷的鏈接。有什么辦法可以預防嗎?
uj5u.com熱心網友回復:
您需要將所需的匹配放在積極的前瞻和積極的后瞻之間:
let html = `<br>volume 1 <a href="https://www.google.com" /a><br>\n<br>image <a href="https://www.facebook.com" /a><br>`
let links = html.match(/(?<=volume.*?href=\").*?(?=\")/ig);
console.log(links);
運算式解釋:
(?<=...)是一個積極的回顧。它斷言它...后面的內容是它內部的內容(volume.*?href=\"上面的運算式中的 )。volume從字面上匹配“音量”這個詞。i請注意,由于末尾的標志,此處的所有匹配項都不區分大小寫。.*?匹配任何字符零次或多次,而不是貪心。因此它將匹配任何字符,直到它到達下一個運算式。href=\"href="從字面上匹配。.*?再次,非貪婪地匹配零到無限次之間的任何字符。(?=\")是一個積極的前瞻。它斷言在它之前出現的是".
您可以在這里找到更好的解釋:https ://regex101.com/r/SOB1Gi/1 。
簡而言之,此運算式匹配出現在單詞卷之后的任何鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/438946.html
標籤:javascript 正则表达式 网页抓取 dom
