一尘不染

查找链接的 “ href”值的正则表达式

c#

我需要一个正则表达式模式来查找HTML中的网页链接。

我首先使用@"(<a.*?>.*?</a>)"提取链接(<a>),但无法从中获取链接href

我的字符串是:

  1. <a href="www.example.com/page.php?id=xxxx&name=yyyy" ....></a>
  2. <a href="http://www.example.com/page.php?id=xxxx&name=yyyy" ....></a>
  3. <a href="https://www.example.com/page.php?id=xxxx&name=yyyy" ....></a>
  4. <a href="www.example.com/page.php/404" ....></a>

1,2和3是有效的,我需要他们,但4号是无效的,我(?=是必不可少的)


谢谢大家,但是我不需要解析<a>。我有href="abcdef"格式的链接列表 。

我需要获取href链接并对其进行过滤,我最喜欢的网址必须包含?=喜欢page.php?id=5

谢谢!


阅读 261

收藏
2020-05-19

共1个答案

一尘不染

我建议在正则表达式上使用HTML解析器,但是这里仍然是一个正则表达式,它将href根据每个链接的属性值创建捕获组。它将匹配使用双引号还是单引号。

<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1

您可以在此处查看此正则表达式的完整说明。

摘要游乐场:

const linkRx = /<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1/;

const textToMatchInput = document.querySelector('[name=textToMatch]');



document.querySelector('button').addEventListener('click', () => {

  console.log(textToMatchInput.value.match(linkRx));

});


<label>

  Text to match:

  <input type="text" name="textToMatch" value='<a href="google.com"'>



  <button>Match</button>

 </label>
2020-05-19