2

私はMDNでそれを読んだ:

m flag  / multiline : 

開始文字と終了文字 (^ と $) を複数行で使用するものとして扱う

だから私はテストを行いました(http://regexr.com?374jj):

私はこの単純な正規表現を持っています:

^[\s\S]{3}

私がチェックglobalしない場合multiline

ここに画像の説明を入力

私だけをチェックした場合global

ここに画像の説明を入力

両方をチェックするとglobal+ multiline:

ここに画像の説明を入力

そのため、フラグmultilineでのみ機能するようです。global

私の観察/結論は正しいですか? 複数行は常にグローバルにする必要がありますか?

4

2 に答える 2

4

mいいえ、必要も暗示もしませgん。検討:

"foo\nbar".match(/^bar/)   // `null`

対。

"foo\nbar".match(/^bar/m)  // ["bar"]

mフラグを使用すると、 が行頭で^bar一致するため、一致します。これがないと、入力文字列の先頭で一致しないため、一致しません。フラグは end-of-(line|input) アンカーにも同様の効果があります。^^m$

g試合を複数回行う必要がある場合は、フラグが有効になります。たとえば、この違いを考えてみましょう。

"foo\nbar\nfoo\nbar".replace(/^bar/m, "BAZ")

...これにより、次のことがわかります。

ふー
バズ
ふー
バー

2 番目の一致は置き換えられていないことに注意してください。gフラグを追加した場合の結果と比較してください。

"foo\nbar\nfoo\nbar".replace(/^bar/mg, "BAZ")

...これにより、次のことがわかります。

ふー
バズ
ふー
バズ

すべての一致が置き換えられたことに注意してください。

于 2013-11-10T14:47:37.333 に答える
2

まあ、それはあなたが達成しようとしているものに依存します。グローバルフラグがないと、最初の一致のみが取得されます。複数行フラグがない場合、最初の行のみが考慮されます。

于 2013-11-10T14:50:56.133 に答える