2010-11-25 10 views
0

私は、JavaScript文字列内に、私が持っているリスト以外のタグがあるかどうかを検出したいと思います。それは、もし私のStringの中に望ましくないタグがあるなら、それらを検出することを意味します。私がやっていることJavaScriptでregexpでタグのサブセットを検出するにはどうすればよいですか?

は次のとおりです。

var expression = new RegExp("<[^(BR|SPAN|STRONG|STRIKE|EM|U|FONT)]*>", "gi"); 

if (expression.test(aString)) { 
     // detection 
} 

しかし、この正規表現は動作していないよう...

誰もがアイデアを持っていますか?

あなただけ試してみました[^...]溶液(これはtrueの場合、悪いタグが発見されたをテストする場合はIE)

var expression = new RegExp("<(BR|SPAN|STRONG|STRIKE|EM|U|FONT) ?[^>]*>", "gi"); 

...そして、あなたのテストをリバース:

答えて

0

は、おそらくこのような何かをしたいです文字のとそのセットで動作します。文字列ではありません。

私はで終わります。これは、「>ではないものがあり、その後に>が続きます」ということを意味します。属性を持つ要素もキャッチします。

EDIT

MSaltersが指摘したように、私があなたの質問を読み違えるようです。あなたはそれがあなたの入力が上記のリストに含まれていないタグが含まれ、その後をテストする場合は、この

var expression = new RegExp("<(?!BR|SPAN|STRONG|STRIKE|EM|U|FONT) ?[^>]*>", "gi"); 

のような何かをしたい、表現を逆にするのではなく、しないでください。

+0

あなたが正しいです、テストの逆に、あなたのソリューションは本当に良いです。この助けをありがとう!良い一日を過ごしてください ! –

+0

Ehm、それはホワイトリストです。テストはすでに「逆転」しています。あなたの考えでは、 'ランダムテキスト'をチェックすると、 '
'と一致し、テストに合格します。 ''部分文字列を検出する正規表現_があります。 – MSalters

+0

@MSalters:ああ、そうですよ!私は質問を間違えた。 –

0

あなたはテストを元に戻すことができますが、それは難しいです。

お探しのものはおおよそ<([^BSEUF].*|U[^ >]+|B|B[^R].*|BR[^ >]+|E|E[^M].*|EM[^ >]+|||||)です。私はタグをSで見つめて一致する部分は除外しましたが、パターンを取得する必要があります。最初に、B、S、E、U、Fで始まらないものはすべて捕まえます。次にUで始まるものはすべて捕捉しますが、Uに続く余分な文字(たとえば<UA>)があります。 3番目のケースは<B>をキャッチします。 4番目のケースは<BA><BAA>です。 5番目のケースは<E>です。 6番目のケースは<BRA>です。第7のケースは<EA><EAA>をキャッチし、第8のケースは<EMA>をキャッチします。

これを終了するには、あなたが<SPA><SA><SPAA><SPANA>エトセトラをキャッチするために持っている:彼らは短いに(1)しているため、異なるタグ、特定の共有接頭辞の後に(2)異なる、または(3)許容可能なタグよりも長い。

+0

umm ...否定的な先読みでは解決できないこの問題には何がありますか? –

関連する問題