Ответ 1
Вы можете попробовать это регулярное выражение:
/href="([^\'\"]+)/g
Пример: http://regexr.com?333d1
Обновление: или проще с помощью не жадного метода:
/href="(.*?)"/g
Мне нужно регулярное выражение, чтобы найти содержимое hrefs из этих тегов:
<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>
Просто URL, а не href/tags.
Я разбираю простой текстовый запрос ajax, поэтому мне нужно регулярное выражение.
Вы можете попробовать это регулярное выражение:
/href="([^\'\"]+)/g
Пример: http://regexr.com?333d1
Обновление: или проще с помощью не жадного метода:
/href="(.*?)"/g
Для этого вам может не понадобиться Regex.
o = document.getElementsByTagName('a');
urls = Array();
for (i =0; i < o.length; i++){
urls[i] = o[i].href;
}
Если это простой текст, вы можете вставить его в отображаемый элемент не DOM, т.е. display: none
, а затем обращаться с ним регулярно таким образом, как я описал.
Это будет хорошо. 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]);
}
Может быть проще использовать 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]');
И итерация каждого node
UPDATE (потому что пост обновлен)
Пусть html будет вашим сырым ответом
var matches = $(html).find('[href]');
var hrefs = [];
$.each(matches, function(i, el){ hrefs.push($(el).attr('href'));});
//hrefs is an array of 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' );
href
=
'
и "
, поэтому вы DRY'
и "
i
игнорировать регистр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);
Я объединил несколько решений и придумал это (протестирован в .NET):
(?<=href=[\'\"])([^\'\"]+)
Пояснение:
(? < =): оглянитесь, чтобы не включать эти символы
[\ '\ "]: сопоставлять как одиночные, так и двойные кавычки
[^]: сопоставить все остальное, кроме символов после '^' здесь
+: одно или более появление последнего символа.
Это хорошо работает и не является жадным с цитатой, поскольку это остановит совпадение момента, когда он найдет цитату
как насчет пробелов вокруг =? этот код исправит его:
var matches = str.match(/href( *)=( *)("|'*)(.*?)("|'*)( |>)/);
console.log(matches);
Важно быть неживым. И для удовлетворения -matching- '
или "
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 присваивает data-href...