我需要一个正则表达式来从这些标签中找到href的内容:
<p class="bc_shirt_delete">
<a href="/CustomContentProcess.aspx?CCID=13524&OID=3936923&A=Delete" onclick="javascript:return confirm('Are You sure you want to delete this item?')">delete</a>
</p>
只是网址,而不是href /标签。
我在这里解析纯文本ajax请求,所以我需要一个正则表达式。
答案 0 :(得分:17)
答案 1 :(得分:5)
这样做会很好。 http://jsfiddle.net/grantk/cvBae/3/
var str = '<p href="missme" class="test"><a href="/CustomContentProcess.aspx?CCID=13524&OID=3936923&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' );
href
属性=
'
和"
的组(2),以便您干'
和"
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&OID=3936923&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&OID=3936924&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&OID=3936925&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&OID=3936923&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 ......