2011-07-18 23 views
0

ウェブコンテンツのリンクを一致させたい私はPHPでこれを行うにはfile_get_contents(url)を使うことができることを知っています。どのようにJavaScriptでどうですか?正規表現については 、 javascript正規表現

<a href="someurl/something" id="someid">contents</a> 

のようにどのように私は(貪欲ない、一度だけマッチ)これに合わせて、jsファイルに正規表現を使用することができます。私はこれを使用しようとします

/^\<a href=\"someurl\/something\" id=\"someid\"\>(+?)\<\/a\>$/ 

しかし、動作しません。 誰かを助けることができますか? ありがとう!

+3

このために正規表現を使用する必要はありません。ところで、あなたのエラーはドットがありません: '(+?)'ではなく '(。+?)'は正規表現を少なくとも構文的に有効にします。 (そしてスラッシュの前にバックスラッシュを除く必要はありません) –

答えて

0

DOMとjQueryの提案は優れているが、あなたはまだこれを試して、その後、正規表現を使用する場合:

/^<a href=".*?" id=".*?">(.*?)<\/a>$/ 
+0

eacapeは必要ありませんか? \ "、\ < – nich

+1

のようにエスケープする必要はありません。デモ[here](http://jsfiddle.net/GcB8k/)をご覧ください。 –

4

正規表現でHTMLを解析することはこの問題を解決する最適な方法ではなく、ページのライブDOMにアクセスできる場合は、代わりにDOMメソッドを使用する必要があります。のように、正規表現の代わりに

document.getElementById('someid').innerHTML // this will return 'contents' 

の代わりに使用する必要があります。

3

要素を取得するためにjQueryのようなライブラリを使用し、.text()呼び出しでコンテンツを取得することを強くお勧めします。正規表現でHTMLを解析しようとするよりもはるかに単純で信頼性が高いです。

+2

なぜjQueryですか?私は、jQueryが最も簡単なことに推薦されているのを見続けています。ブラウザの奇妙さ、優雅さの欠如、またはそれを必要とするものさえありません。個人的には、これにネイティブDOM APIを使用しています。 –

+0

@Delan Azabani - この特定の例が*すべて*実行されている場合、はい、DOMは正常に動作します。しかし、典型的には、このようなことは孤立して行われるわけではありません。正直なところ、jQueryはちょうどいいところです。 – Amber

0

あなたが同様に使用して、より大きな文書ではjQueryの

var elements = $(html); 
var links = elements.find('a'); 
links.each(function(i, link){ 
    //Do the regexp matching in here if you wish to search for specific urls only 
}); 

を持つ要素を作成しますDOMはすべてをテキストとして再正規化するよりも簡単です。

0

この〜

try { 
    boolean foundMatch = subjectString.matches("(?im)<a[^>]*href=(\"[^\"]*\"|'[^']*'|[^\\s>]*)[^>]*>.*?</a>"); 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 

マッチ二重引用符、単一引用符と空を試してみてください。

<a href="someurl/something" id="someid">contents</a> 
<a href='someurl/something' id='someid'>contents</a> 
<a href=someurl/something id=someid>contents</a>