Подтвердить что ты не робот

JS Regex, чтобы найти href нескольких тегов

Мне нужно регулярное выражение, чтобы найти содержимое hrefs из этих тегов:

<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, поэтому мне нужно регулярное выражение.

4b9b3361

Ответ 1

Вы можете попробовать это регулярное выражение:

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

Пример: http://regexr.com?333d1

Обновление: или проще с помощью не жадного метода:

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

Ответ 2

Для этого вам может не понадобиться Regex.

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

Если это простой текст, вы можете вставить его в отображаемый элемент не DOM, т.е. display: none, а затем обращаться с ним регулярно таким образом, как я описал.

Ответ 3

Это будет хорошо. 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]);
}

Ответ 4

Может быть проще использовать 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]');

И итерация каждого 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

Ответ 5

Вот надежное решение:

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

Цветной справочник RegEx от http://www.regexr.com

Что он делает:

  • обнаруживает теги
  • lazy пропускает другие атрибуты и группы HTML (1), поэтому вы DRY
  • соответствует атрибуту href
  • учитывает возможные пробелы вокруг =
  • создает группу (2) из ​​ ' и ", поэтому вы DRY
  • соответствует любому, кроме группы (1) и групп (3) it
  • соответствует группе (2) ' и "
  • соответствует группе (1) (другие атрибуты)
  • соответствует всем остальным, до закрытия тега
  • установить флаги i игнорировать регистр

Ответ 6

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

Я объединил несколько решений и придумал это (протестирован в .NET):

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

Пояснение:

(? < =): оглянитесь, чтобы не включать эти символы

[\ '\ "]: сопоставлять как одиночные, так и двойные кавычки

[^]: сопоставить все остальное, кроме символов после '^' здесь

+: одно или более появление последнего символа.

Это хорошо работает и не является жадным с цитатой, поскольку это остановит совпадение момента, когда он найдет цитату

Ответ 8

как насчет пробелов вокруг =? этот код исправит его:

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

Ответ 9

Важно быть неживым. И для удовлетворения -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...