我需要一个正则表达式模式来查找HTML中的网页链接。
我首先使用@"(<a.*?>.*?</a>)"提取链接(<a>),但无法从中获取链接href。
@"(<a.*?>.*?</a>)"
<a>
href
我的字符串是:
<a href="www.example.com/page.php?id=xxxx&name=yyyy" ....></a>
<a href="http://www.example.com/page.php?id=xxxx&name=yyyy" ....></a>
<a href="https://www.example.com/page.php?id=xxxx&name=yyyy" ....></a>
<a href="www.example.com/page.php/404" ....></a>
1,2和3是有效的,我需要他们,但4号是无效的,我(?和=是必不可少的)
?
=
谢谢大家,但是我不需要解析<a>。我有href="abcdef"格式的链接列表 。
href="abcdef"
我需要获取href链接并对其进行过滤,我最喜欢的网址必须包含?和=喜欢page.php?id=5
page.php?id=5
谢谢!
我建议在正则表达式上使用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>