18

これらのタグから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 /タグではなく、URLのみ。

ここでプレーンテキストのajaxリクエストを解析しているので、正規表現が必要です。

4

10 に答える 10

22

この正規表現を試すことができます:

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

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

更新:または貪欲でない方法で簡単に:

/href="(.*?)"/g
于 2012-12-10T14:02:12.037 に答える
9

これでうまくいきます。http://jsfiddle.net/grantk/cvBae/216/

正規表現の例: https://regex101.com/r/nLXheV/1

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]);
}

于 2012-12-10T14:24:45.737 に答える
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' );

http://www.regexr.com からの色付きの href 正規表現

機能:

  • タグを検出します
  • lazy は他の HTML 属性とグループ (1) をスキップするので、DRY
  • 一致hrefする属性
  • 周囲の可能な空白を考慮します=
  • のグループ (2) を作成する'ので"、DRY
  • グループ (1) およびグループ (3) 以外に一致します
  • と のグループ (2) に一致し'ます"
  • グループ (1) に一致 (その他の属性)
  • タグを閉じるまで、他にあるものと一致します
  • i大文字と小文字を区別しない適切なフラグを設定する
于 2016-11-30T11:19:37.380 に答える
4

そのために正規表現は必要ないかもしれません。

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

プレーン テキストの場合は、表示されている非 DOM 要素、つまりdisplay: noneに挿入し、説明した方法で定期的に処理できます。

于 2012-12-10T13:59:12.033 に答える
3

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

そして、各ノードを繰り返します

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
于 2012-12-10T13:57:50.390 に答える
1

私はいくつかのソリューションを組み合わせて、これを思いつきました(.NETでテスト済み):

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

説明:

(?<=) : 後ろを見て、これらの文字が含まれないようにします

[\'\"] : 一重引用符と二重引用符の両方に一致

[^] : ここの '^' の後の文字を除くすべてに一致

+ : 最後の文字の 1 つ以上の出現。

これはうまく機能し、引用を見つけた瞬間に一致を停止するため、引用に貪欲ではありません

于 2014-03-13T23:39:41.370 に答える
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);
于 2012-12-10T14:02:01.807 に答える