ryuone's memo

備忘録

正規表現:先読み

先読み

肯定先読み

文法
(?=部分パターン)
意味
部分パターンがマッチすると真になる。部分パターンが対象文字列を一切消費しない。$&や格納型閉じ丸括弧の中身は影響を受けない。つまり、読んだ文字列を処理する事無く先を覗くことが出来る。

否定先読み

文法
(?!部分パターン)
意味
部分パターンがマッチしないと真になる。否定先読みは、何ともマッチ出来ない場合に成功となる。

先読みの例1

“Hello(?= world| again)” Helloにマッチするが、後に” world”か” again”が続く場合に限られる。
“\d+(?!\.)” 後ろにピリオドが続かない数字とマッチする。/\d+(?!\.)/.test('A12345')は’12345’にマッチする。
“\d+(?=[^.])” 後ろにピリオド以外の物が続く数字とマッチする。/\d+(?=[^.])/.test('A12345')は’1234’にマッチする。
“^(?![A-Z]*$)[a-zA-Z]*$” 対象が英文字のみで構成され、しかもすべてが大文字で無いときに限りマッチする。”ABCD”はマッチしない。”abcd”/”aBCd”はマッチする。
“^(?=.*?this)(?=.*that)” “this” / “that”が行中で存在する場合にマッチする。/^(?=.*?this)(?=.*that)/.test("this is a red pen, that is a green pen.")

先読みの例2

“1234567890”.replace(/(\d)(?=(\d\d\d)+$)/g, “$1,”); 数3桁毎にカンマを記述する処理。後ろに3桁の数字の組が存在する数字の後にカンマを追加している。
“1234567890”.replace(/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/g, “$1,”) 数3桁毎にカンマを記述する処理。1桁から3桁の数字で、3桁の数字の組が続いて、後に数字が来ない場合に最初の1桁から3桁の数字の後にカンマを追加している。
Pocket
Delicious にシェア

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください