检查链接之前是否有特定的文本(regex)



我正试图从一个拥有";体积"卷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后面出现的任何链接。

最新更新