マーカーで始まり、別のマーカーで終わる一連の行を削除する必要があります。 このようなテキストをすべて見つけ、regexを使ってそれらを削除したいと思います。問題は、正規表現は一度に1行にしかマッチしないということです。私はどのように進めるべきですか?JavaScriptで正規表現を使用して複数の行にまたがるテキストを削除するにはどうすればよいですか?
答えて
ほとんどの正規表現パーサーでは、最後にs
を「ドットオール」修飾子として追加できます。これにより、改行(これは通常は一致しません)を含めて、.
は何でも一致します。
しかし、dotall修飾子はjavascriptには存在しません。代わりに、定義済みの文字クラスとその否定を使用することによって "擬似ドット"修飾子があります。これらの2つのものは、改行を含むすべてのものと一致します。標準的な例は[\s\S]
(空白であるものにマッチするか、これは空白ではないものと一致=何でもマッチする)です。しかし、どんな文字クラスとその否定も行います(例えば、[\d\D]
も機能します)。
string.replace(/S[\s\S]*?E/g, '')
2つのノート:あなたのスタートトークンがS
であり、あなたの最後のトークンがある場合
E
あなたはこれを行うことができ、私はすべてのインスタンスを置き換えるためにg
またはグローバル修飾子を使用しています。 [\s\S]*?
では、?
は「最短シーケンスと一致する」(非貪欲型)を意味します。そうすれば、最初のbeginトークンと最後のトークンの間のすべてのものを単一のトークンとして扱うのではなく、区切られたトークンのインスタンスになります。
あなたは/ m修飾子を試してください。
だけというグーグル:http://www.regular-expressions.info/modifiers.html と、それは言う:
/m "は、マルチラインモード" を有効にします。このモードでは、キャレットとドルは件名の文字列の改行の前後に と一致します。あなたの特定の問題については
ありがとうございます。 –
-1あなたは何かグーグルに行って、理解していないと思う。 'm'修飾子は2つのアンカーの振る舞いを変更するだけですが、複数行にわたる正規表現のマッチングは行いません。 – stema
@AmoghTalpallikar、これは動作しません。 'マルチラインモード'はあなたが望むことをしません。しかし、私の答えのように擬似ドットモディファイアを使うことができます。 –
、あなたはこのようなもの(例)行うことができます:
>[^<]+<
^^^
| |__|__ End marker
|
Start marker
をこれは、新しい行を含む開始マーカー>
と終了マーカー<
間のすべてを、一致します。あなたが好む開始マーカーと終了マーカーを選択してください。あなたの終わりまたは開始マーカーが複数の文字である場合、キャプチャ(?:yourmarkerhere)
として数えてはならない括弧の中に入れてください。
string.replace(>[^<]+<, '')
最後の最後のマーカーを追加するのを忘れてしまいました。私は開始マーカーと最後のマーカーをより明白にしました。今すぐやってみて下さい。 – ohaal
regexパターンの最後にはsを使用してください。 's'を追加すると、正規表現で改行を含むテキストをマッチさせることができます。
'/ patternhere/s'
詳細情報はこちらhttp://www.php.net/manual/en/reference.pcre.pattern.modifiers.php - javascriptでも動作します。
既に試した正規表現を表示してください。 これがなければ、正規表現で 'm'(複数行)修飾子を探していることをお勧めします。 – Minras