1

<tag>開始 ( ) と終了 ( </tag>) を含む、一致するすべての HTML 文字の数 (長さ) を取得しようとしています。attributes

次の HTML を検討してください。

<div>
    <a href="#">link</a>
    <span>some text</span>
</div>

HTML の文字数は40になります (カウントされるため<div><a href="#"></a><span></span></div>) 。

これは作業中の regExp です (gskinner.com で)

しかし、JavaScriptで使用するとエラーが発生しますjsfiddle
を参照してください

4

2 に答える 2

3

エラーの理由は、正規表現にポジティブルックビハインドが含まれているためです。これは、正規表現(?<=\s)のJavascript実装では提供されない機能です(Javascriptでのルックビハインドの模倣を参照)。(より正確には、エラーは、?エスケープ(されていない、が続かない場合!=などが続くことによって発生します:。)

実用的な例へのリンクは、ActionScript 3で記述されたFlexアプリケーションであり、前向きな後読みが含まれています。

また、正規表現リテラルの最後にフラグを追加して、gからすべての一致の配列を取得する必要がありmatchます。そうすれば、それらの長さを合計できます。

ポジティブルックビハインドを削除し、gフラグを追加した実例を次に示します:jsfiddle

ほぼ正しい長さを示してい163ますが、カウントはお任せします。
後読みの代わりに何かを追加するか、正規表現を編集する必要があるかもしれません-それを解決するのもあなたに任せます。

于 2013-01-19T10:18:04.457 に答える
1

構文エラーがあります。

/スラッシュは区切り文字でもあるため、スラッシュをエスケープする必要があります。

/(<(?:[A-Za-z_:][\w:.-]*(?=\s)(?!(?:[^>"\']|"[^"]*"|\'[^\']*\')*?(?<=\s)\s*=)(?!\s*\/?>)\s+(?:".*?"|\'.*?\'|[^>]*?)+|\/?[A-Za-z_:][\w:.-]*\s*\/?)>)/
于 2013-01-18T16:11:35.797 に答える