0

私は正規表現を調べてきましたが、htmlタグが文字列として格納されている配列があると考えています。array=["</div>,"</a>", "<div id='test'>", "<a href='http://test/new.html'>", "</a>", "</div>", "<span style='color:#ffffff;'>"]

配列を1つずつ確認すると、

たとえば、完全なタグと不完全なタグを検出する場合は、開いて、その後その場所で閉じます。したがって、これら2つは完全なタグに分類されます...<div>開かれますが、閉じられないため、不完全な開いたタグに分類されます。 、最初の場所は閉じているため、不完全な閉じたタグの下にあります。</div><span></div>

これはJavaScriptを使用して実行できますか?

4

2 に答える 2

4

これは、Stackデータ型のユーティリティを教えるための大きな問題のように聞こえます。Javascriptでは、ここに示すように、すべての配列でスタック関数が使用されます

どうしますか?

空のスタックから始めます。配列の要素を順番にループします。各アイテムについて:

  • オープンタグの場合は、スタックにプッシュします。
  • クローズタグの場合は、スタックから一番上のアイテムをポップします
    • 2つのタグが一致することを確認してください。(最後に開いたアイテムを閉じる必要がありますね?)
    • そうでない場合、失敗します

最後に、配列が完成したら、スタックが空であることを確認します。

  • そうでない場合は、すべてのタグが閉じられたわけではありません。失敗
  • もしそうなら、成功!

例えば:

[<div>, <a>, <span>, </span>, </div>, </a>]

失敗します。プッシュdiv、プッシュa、プッシュspan。ポップspana一致しないポップdiv

次のようになります

[<div>, <a>, <span>, </span>, </a>, </div>]

メソッドの最後でスタックが空(長さ0)になるため、これは合格です。


編集:個別の手順で正規表現を使用する場合:

タグが開いているかどうかを確認するには:

tag.match(/<\//) == null

これにより、タグに文字が含まれているかどうかがチェックされます<\

タグからコンテンツを取得するには:

var tagContent = tag.match(/\w+/)[0];

これにより、単語文字のグループが取得されます。具体的には、最初のグループ。空白が式を終了するため、タグ名を取得し、属性を無視する必要があります。グローバルに一致した場合(複数の一致がある場合)、Matchは常に配列を返すため、返された配列の0番目のインデックスを取得して値を取得します。

2つのタグを比較するには:

tag1Content == tag2Content

これは真剣に正規表現を必要としません。

于 2012-08-08T13:25:08.313 に答える