我正试图从一个拥有";体积"卷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链接。有什么办法可以预防吗?
您需要将您想要的匹配置于积极前瞻和积极前瞻之间:
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="
(- CCD_ 6与单词";"体积";字面上注意,由于末尾的
i
标志,此处的所有匹配都不区分大小写 .*?
匹配任何字符零次或多次,而不会贪婪。因此,它将匹配任何字符,直到它到达下一个表达式- CCD_ 9与CCD_
.*?
再次非贪婪地匹配零到无穷多次之间的任何字符- CCD_ 12是一个积极的展望。它断言在它之前出现的是
"
您可以在这里找到更好的解释:https://regex101.com/r/SOB1Gi/1.
简而言之,这个表达式匹配单词volume后面出现的任何链接。