レッスン 3

フラグとマッチモード

Global、大文字小文字無視、multiline、dotAll、Unicode マッチ。

フラグは文字の意味ではなく、エンジンが 入力をどうスキャンするか を変えます。JavaScript ではフラグは閉じ / の後、または new RegExp(pattern, flags) の第 2 引数に現れます。

一般的なフラグ(JavaScript)

フラグ名前効果
gglobal最初だけでなくすべてのマッチを検索
iignore caseAa にマッチ
mmultiline^$ が文字列端だけでなく行境界にマッチ
sdotAll. が改行にマッチ
uUnicodeUnicode 対応 \u{...} と一部プロパティエスケープ
ystickylastIndex でのみマッチ(高度な反復)

他言語も同様のスイッチ(re.IGNORECASE(?i) など)を少し異なる名前で提供します。

Global マッチが重要

g なしでは String.prototype.match と多くの exec ループは最初のヒットで止まります。ログパーサーとハイライトツールはほぼ常に global モード—または明示的な反復—が必要です。

ステートフル regex オブジェクト に注意: global な RegExplastIndex を更新します。無関係な文字列間で 1 インスタンスを再利用すると、lastIndex をリセットしない限りマッチをスキップできます。

Multiline ログファイル

ログファイルは多くの行を含みます。m ありでは ^ERROR行頭 から ERROR で始まる行にマッチ—通常これが欲しい動作です。m なしでは ^ はしばしば blob 全体の先頭のみを意味します。

g と組み合わせて貼り付け内のすべてのエラー行を見つけます。

DotAll と貼り付け内容

ユーザー入力と JSON 文字列には \n が含まれることがあります。デフォルトでは . は行を跨ぎません;s(dotAll)で . がマッチ—過剰マッチのリスクを受け入れる場合 に「閉じタグまで任意」パターンに有用。

Unicode と国際化テキスト

ユーザー名、都市、slug に非 ASCII 文字が含まれることがあります。u フラグはサロゲートペアとモダン JavaScript の \p{...} プロパティクラスを正しく扱います。

Unicode 意識なしでは \w が国際化アプリで有効な文字を見逃すことがあります。

要点

パターンが「1 行では動くがファイルでは動かない」とき、まず フラグ を確認—特に gms。その後アンカーと greediness を再確認してください。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る