JS Regex找到几个标签的href

时间:2012-12-10 13:53:16

标签: javascript regex

我需要一个正则表达式来从这些标签中找到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>

只是网址,而不是href /标签。

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

9 个答案:

答案 0 :(得分:17)

你可以试试这个正则表达式:

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

示例:http://regexr.com?333d1

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

/href="(.*?)"/g

答案 1 :(得分:5)

这样做会很好。 http://jsfiddle.net/grantk/cvBae/3/

var str = '<p href="missme" class="test"><a href="/CustomContentProcess.aspx?CCID=13524&amp;OID=3936923&amp;A=Delete" onclick="">delete</a></p>'
    
    var patt = /<a href="(.*?)"/g;
    while(match=patt.exec(str)){
    	alert(match[1]);
    }

答案 2 :(得分:4)

您可能不需要正则表达式。

o = document.getElementsByTagName('a');
urls = Array();
for (i =0; i < o.length; i++){
   urls[i] = o[i].href;
}

如果它是纯文本,您可以将其插入显示的非DOM元素,即display: none,然后以我描述的方式定期处理它。

答案 3 :(得分:4)

这是一个强大的解决方案:

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' );

Coloured href RegEx from http://www.regexr.com

它的作用:

  • 检测到代码
  • lazy跳过其他HTML属性和组(1),因此您可以“DRY”
  • 匹配href属性
  • 考虑=
  • 周围可能的空格
  • 制作'"的组(2),以便您干
  • 匹配除组(1)和组(3)之外的任何内容
  • 匹配'"
  • 的组(2)
  • 匹配组(1)(其他属性)
  • 匹配其他任何内容,直到关闭标记
  • 设置正确的标记i忽略大小写

答案 4 :(得分:2)

使用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]');

迭代每个节点

更新(因为发布更新后)

让html成为您的原始回复

var matches = $(html).find('[href]');
var hrefs = [];
$.each(matches, function(i, el){ hrefs.push($(el).attr('href'));});
//hrefs is an array of matches

答案 5 :(得分:1)

我结合了几个解决方案并提出了这个(在.NET中测试):

(?<=href=[\'\"])([^\'\"]+)

说明:

(?&lt; =):看后面所以它不会包含这些字符

[\'\“]:匹配单引号和双引号

[^]:匹配除了“^”之后的字符以外的所有其他内容

+:最后一个字符出现一次或多次。

这样做效果不错,因为它会在找到报价时停止匹配

答案 6 :(得分:0)

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>";

var matches = [];

str.replace(/href=("|')(.*?)("|')/g, function(a, b, match) {
  matches.push(match);
});

console.log(matches);

或者如果你不关心href:

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

console.log(matches);

答案 7 :(得分:0)

周围的空间怎么样? 这段代码将解决它:

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

答案 8 :(得分:0)

非贪婪很重要。并且为了满足匹配 - ' "

test = "<a href="#" class="foo bar"> banana 
        <a href='http://google.de/foo?yes=1&no=2' data-href='foobar'/>"

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

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