「マッチはさせたいが消費したくない」ときに使う構文。
構文の整理
| 構文 | 名前 | 意味 |
|---|---|---|
(?=...) |
肯定先読み | 直後に ... が続く位置 |
(?!...) |
否定先読み | 直後に ... が続かない位置 |
(?<=...) |
肯定後読み | 直前が ... である位置 |
(?<!...) |
否定後読み | 直前が ... でない位置 |
実例: 数値の 3 桁区切り
const format = (n) =>
String(n).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
format(1234567); // => "1,234,567"
\B と先読みの組み合わせで「3 桁ごとの境界位置」だけにカンマを挿入する。文字自体は消費しないので置換対象は空文字の位置になる。
実例: パスワード要件
// 8文字以上・英大文字と数字を各1文字以上含む
const ok = /^(?=.*[A-Z])(?=.*\d).{8,}$/.test(input);
先読みを並べると AND 条件になる。それぞれの (?=...) は位置を進めずに条件だけ検査する。
後読み
(?<=...)は環境によって可変長を許さない(JS は許す、PCRE は固定長のみ)。移植時は注意。
Naxii の置き場