2016-08-04 7 views
-2

たとえば、alert("hi there123");を ""に置き換えたHTMLパーサーを作成しようとしています。
だからregexを使用してalert()タグを削除する

alert(123); var hello = 0; 
console.log(hello); 

になるだろう:

var hello = 0; 
console.log(hello); 

誰かが正規表現を使用して提案し、私はそれに鳩。 今これは私がオンラインに見つけたものです:
something(.*?)somethingは言葉「何か」と「何か」の間のテキストをつかむだろうが、私は言葉「警告(」<とをどうしようとすると - 、(に気付きますそれは動作しません

私がやろうとしていますどのようなPS、最初の警告間のテキストを削除している()してからアラートを削除();そうのように:。string.replace("alert();", "");

、すべての出現の上に正規表現ループを行います?

もっと良い解決策があれば、私に知らせてください。

ご協力いただければ幸いです。

/(alert\((.*)\);)/g 

ここで重要なのだろう括弧をエスケープ:

+2

正規表現の中のかっこには特別な意味があります(グループにマークします)。特別な意味を必要とせず、かっこに一致させたい場合は、それをエスケープする必要があります。良いナイフのような正規表現は、あなたが傷つける可能性のある非常に鋭いツールです。それらを悪用する前に、それらについてすべて注意深く学んでください。 –

+0

@ RossPresserだから、あなたはそのようなタスクのための正規表現を使用してアドバイスですか?もしそうなら、より良いアプローチは何でしょうか?ご説明ありがとうございます。 –

+0

正規表現は、HTMLを解析するために使用されません。この質問を参照してください:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – War10ck

答えて

1

は、次のような正規表現を持っている必要があります。

。すべての文字に一致します。

*一致が発生しました。

は\次の文字

グラム修飾子脱出:グローバル修飾子を、最初の一致を返しません。ここ

サンプル:https://regex101.com/r/fD8tQ8/1

+1

ありがとうございました!それは働いている。 –

+0

答えとしてフラグを付けることを考えてください;) –

0

あなたが()をエスケープする必要があります。

alert\(.*?\); 

デモ:https://regex101.com/r/sL6fM6/1

も注意してください、あなたは一度にそれを行うことができます。

alert(...)の式のかっこがある場合は、この機能は無効です。これはよりトリッキーな正規表現で扱われるべきです。

0

これを達成するには、いくつかの文字をエスケープする必要があります。

正規表現のかっこをエスケープします。
.replace()メソッドの二重引用符をエスケープします。このようhttps://regex101.com/#javascript

何かがあなたのために働く必要があります:

string.replace(/alert\([\'|\"](.*)[\'|\"]\)\;/gmi, ""); 

this CodePenでテスト

そして最後には、あなたのregexsをテストするために、ここでの素敵な正規表現テスターです。

+0

'm'修飾子は'^'と' $ 'が1文字ごとではなく1行で扱われるためです。 – chris85

関連する問題