これは、Stackデータ型のユーティリティを教えるための大きな問題のように聞こえます。Javascriptでは、ここに示すように、すべての配列でスタック関数が使用されます。
どうしますか?
空のスタックから始めます。配列の要素を順番にループします。各アイテムについて:
- オープンタグの場合は、スタックにプッシュします。
- クローズタグの場合は、スタックから一番上のアイテムをポップします
- 2つのタグが一致することを確認してください。(最後に開いたアイテムを閉じる必要がありますね?)
- そうでない場合、失敗します
最後に、配列が完成したら、スタックが空であることを確認します。
- そうでない場合は、すべてのタグが閉じられたわけではありません。失敗
- もしそうなら、成功!
例えば:
[<div>, <a>, <span>, </span>, </div>, </a>]
失敗します。プッシュdiv
、プッシュa
、プッシュspan
。ポップspan
。a
一致しないポップdiv
次のようになります
[<div>, <a>, <span>, </span>, </a>, </div>]
メソッドの最後でスタックが空(長さ0)になるため、これは合格です。
編集:個別の手順で正規表現を使用する場合:
タグが開いているかどうかを確認するには:
tag.match(/<\//) == null
これにより、タグに文字が含まれているかどうかがチェックされます<\
タグからコンテンツを取得するには:
var tagContent = tag.match(/\w+/)[0];
これにより、単語文字のグループが取得されます。具体的には、最初のグループ。空白が式を終了するため、タグ名を取得し、属性を無視する必要があります。グローバルに一致した場合(複数の一致がある場合)、Matchは常に配列を返すため、返された配列の0番目のインデックスを取得して値を取得します。
2つのタグを比較するには:
tag1Content == tag2Content
これは真剣に正規表現を必要としません。