Javascript JS Regex查找多个a标记的href

Javascript JS Regex查找多个a标记的href,javascript,regex,Javascript,Regex,我需要一个正则表达式来从以下a标记中查找HREF的内容: <p class="bc_shirt_delete"> <a href="/CustomContentProcess.aspx?CCID=13524&amp;OID=3936923&amp;A=Delete" onclick="javascript:return confirm('Are You sure you want to delete this item?')">delete</

我需要一个正则表达式来从以下a标记中查找HREF的内容:

<p class="bc_shirt_delete">
   <a href="/CustomContentProcess.aspx?CCID=13524&amp;OID=3936923&amp;A=Delete" onclick="javascript:return confirm('Are You sure you want to delete this item?')">delete</a>
</p>

只有URL,而不是href/tags


我正在解析一个纯文本ajax请求,所以我需要一个正则表达式。

使用jQuery可能更容易

 var html = '<li><h2 class="saved_shirt_name">new shirt 1</h2><button class="edit_shirt">Edit Shirt</button><button class="delete_shirt" data-eq="0" data-href="/CustomContentProcess.aspx?CCID=13524&amp;OID=3936923&amp;A=Delete">Delete Shirt</button></li><li><h2 class="saved_shirt_name">new shirt 2</h2><button class="edit_shirt">Edit Shirt</button><button class="delete_shirt" data-eq="0" data-href="/CustomContentProcess.aspx?CCID=13524&amp;OID=3936924&amp;A=Delete">Delete Shirt</button></li><li><h2 class="saved_shirt_name">new shirt 3</h2><button class="edit_shirt">Edit Shirt</button><button class="delete_shirt" data-eq="0" data-href="/CustomContentProcess.aspx?CCID=13524&amp;OID=3936925&amp;A=Delete">Delete Shirt</button></li>';
$(html).find('[data-href]');

你可能不需要正则表达式来做这件事

o = document.getElementsByTagName('a');
urls = Array();
for (i =0; i < o.length; i++){
   urls[i] = o[i].href;
}
o=document.getElementsByTagName('a');
url=Array();
对于(i=0;i
如果它是纯文本,您可以将其插入显示的非DOM元素,即
display:none
,然后按照我描述的方式定期处理它

var str = "";

str += "<p class=\"bc_shirt_delete\">";
str += "<a href=\"/CustomContentProcess.aspx?CCID=13524&amp;OID=3936923&amp;A=Delete\" onclick=\"javascript:return confirm('Are You sure you want to delete this item?')\">delete</a>";
str += "</p>";
或者,如果您不关心href:

var matches = str.match(/href=("|')(.*?)("|')/);

console.log(matches);

您可以尝试以下正则表达式:

/href="([^\'\"]+)/g
例如:

更新:或通过非贪婪方法更轻松:

/href="(.*?)"/g
这会做得很好

正则表达式示例:

var str='

' var patt=/]*href=[“']”([^“']*)[“']/g; while(match=patt.exec(str)){ 警报(匹配[1]);
}
我结合了一些解决方案,提出了以下解决方案(在.NET中测试):


(?关于=?
此代码将修复它:

var matches = str.match(/href( *)=( *)("|'*)(.*?)("|'*)( |>)/);
console.log(matches);

以下是一个强健的解决方案:

let href_regex = /<a([^>]*?)href\s*=\s*(['"])([^\2]*?)\2\1*>/i,
    link_text = '<a href="/another-article/">another article link</a>',
    href = link_text.replace ( href_regex , '$3' );
let href_regex=/',
href=link_text.replace(href_regex,$3');

它的作用是:
  • 检测一个标签
  • lazy跳过其他HTML属性和组(1),因此您可以
  • 匹配
    href
    属性
  • 考虑到
    =
  • 制作一组(2)的
    ,这样你就可以干了
  • 匹配除组(1)和组(3)之外的任何内容
  • 匹配
    的组(2)
  • 匹配组(1)(其他属性)
  • 匹配任何其他内容,直到关闭标记
  • 设置正确的标志
    i
    忽略大小写

重要的是不要贪婪。并且要迎合匹配-

test=“香蕉”
"
test.replace(/href=(?:\'.?\'.\'.\“*?\”)/gi');

免责声明:它没有捕捉到的一件事是html5 attribs data href…

您是否尝试编写它?请使用正确的缩进设置代码格式,它无法使用javascript访问?这是一个文本吗(例如,在文本区域中)或者HTML是页面的一部分?很抱歉,粘贴错误。是的,它是来自ajax请求的纯文本,否则我会使用jQuery。我看到您使用的是HTML5数据属性,所以为什么不通过其API访问它呢?正如我所说,我正在解析的是纯文本ajax请求。@InfraStank一旦这是ajax响应,并且您已经有了jQuery,您就可以简单地访问它了执行上面的操作。不需要在那里使用Regexp。这很好,但是有一个link元素。是否可以使用p的类名来帮助搜索?对不起,我不明白您想要更改什么?请解释一下?因此搜索将只在p标记中使用类名为'bc_shirt_delete'的hrefs。一些修补我到了那里。谢谢!它不完整,因为它没有涵盖所有的情况。请在下面的页面上检查我的答案:很好,但仍需要一些工作。在这一页上检查我的答案:在JS中不支持“向后看”。检查。查看我的答案,虽然没有那么整洁和紧凑。就像我正在寻找的魅力一样工作。谢谢
将失败,例如,许多其他案例也会失败。当然,这对这个问题是有效的;但这只是给那些登陆这里搜索正则表达式的人的一个建议。感谢你指出@Gogol。我在这里添加了一个更新的正则表达式:让我知道是否有任何它可能失败的用例。
(?<=href=[\'\"])([^\'\"]+)
var matches = str.match(/href( *)=( *)("|'*)(.*?)("|'*)( |>)/);
console.log(matches);
let href_regex = /<a([^>]*?)href\s*=\s*(['"])([^\2]*?)\2\1*>/i,
    link_text = '<a href="/another-article/">another article link</a>',
    href = link_text.replace ( href_regex , '$3' );
test = "<a href="#" class="foo bar"> banana 
        <a href='http://google.de/foo?yes=1&no=2' data-href='foobar'/>"

test.replace(/href=(?:\'.*?\'|\".*?\")/gi,'');