2

以下の文字列の開始タグと終了タグの間のコンテンツを取得しようとしています

<a href="./products/" class="link">Products </a>

<a href="./servicesandsolutions/" class="link">Services & Solution </a>

使用される正規表現:

<([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+/>)

最初の文字列では正常に機能していますが、後の文字列では機能しません

4

5 に答える 5

1

正規表現のフレーバーに応じて、先読みメソッドと後読みメソッドを使用して、> と < の一致のみを取得します。

(?<=>)[^>]*(?=<)

(?<=>)- > を先に見る

(?=<)- < を後ろから探す

[^>]*- リンク自体のテキストと一致

先読みと後読みはゼロ幅の一致であるため、必要なものだけが取得されます

于 2012-06-18T16:00:07.563 に答える
1

なぜそんなに複雑なのですか?要素のコンテンツを単純/>([^<]+)</にキャプチャしませんか?

于 2012-06-18T15:55:08.487 に答える
0

これを試してみてください。問題が解決します(追加するだけです|</\1>

<([a-z0-9]+)([^<]+)*(?:>(.*?)|\D+/>|</\1>)

詳細については、を参照してください

于 2012-06-18T16:11:13.123 に答える
0

タグだけ捨ててください。

var str = '<a href="./products/" class="link">Products </a>'
var str2 = '<a href="./servicesandsolutions/" class="link">Services & Solution </a>'
var RE_findOpenAndCloseTag = /^<[^>]+>|<\/[^>]>$/g;

str.replace( RE_findOpenAndCloseTag, '' ) == "Products ";
str2.replace( RE_findOpenAndCloseTag, '' ) == "Services & Solution ";

タグを閉じる場合を除きRE_findOpenAndCloseTag、タグは常に a で始まり、a<を含まないと想定していることに注意してください。>したがって、これは失敗します。'>">これは失敗します

しかし、より簡単な方法は、タグをノードに変換してから、innerHTML を取得することです。

于 2012-06-18T15:52:02.100 に答える
0

通常、正規表現を使用して自分自身の HTML を解析したくない場合は、パーサーの方が優れています。

PCRE を使用していると仮定すると、探している式がランダムに推測されます。

(?is)<([a-z]+)\b[^<>]*(?:>(.*?)</\1>|/>)

これは、ネストされたタグでは機能しないことに注意してください。

于 2012-06-18T15:53:38.863 に答える