JavaScriptの正規表現で繰り返し指定(* + ? {n,m})を学ぼう
先生と生徒の会話形式で理解しよう
生徒
「正規表現で文字の繰り返しってどうやって指定するんですか?」
先生
「正規表現には、繰り返しを表す記号がいくつかあります。*、+、?、そして {n,m} です。」
生徒
「それぞれの意味や使い方を教えてください!」
先生
「では、順番にわかりやすく見ていきましょう。」
1. *(アスタリスク)は0回以上の繰り返し
* は、直前の文字やパターンが0回以上繰り返される場合にマッチします。文字がなくてもマッチするのが特徴です。
const text = "go goo gooo goooo";
const result = text.match(/go*/g);
console.log(result); // ["go", "goo", "gooo", "goooo"]
「go」の後に0文字以上の o が続くパターンにマッチしています。
2. +(プラス)は1回以上の繰り返し
+ は、直前の文字やパターンが1回以上繰り返される場合にマッチします。必ず1回は存在する必要があります。
const text = "go goo gooo goooo";
const result = text.match(/go+/g);
console.log(result); // ["go", "goo", "gooo", "goooo"]
0回の場合はマッチしません。必ず「go」が1回以上続く場合にマッチします。
3. ?(クエスチョン)は0回または1回
? は、直前の文字やパターンが0回または1回だけ出現する場合にマッチします。省略可能な文字を扱うときに便利です。
const text = "color colour";
const result = text.match(/colou?r/g);
console.log(result); // ["color", "colour"]
「u」が0回または1回のどちらでもマッチします。
4. {n,m}(波かっこ)で回数指定
{n,m} は、直前の文字やパターンの出現回数を具体的に指定できます。n回以上 m 回以下の繰り返しにマッチします。
const text = "go goo gooo goooo";
const result = text.match(/go{1,3}/g);
console.log(result); // ["go", "goo", "gooo", "gooo"]
1回から3回の o にマッチするので、goooo は gooo までしかマッチしていません。
5. 活用のポイント
*は0回以上、+は1回以上、?は0回か1回、{n,m}は回数を指定して繰り返しを制御。- テキスト検索、入力バリデーション、文字列パターンの抽出に非常に便利です。
- 正規表現を使うと複雑な文字列パターンも簡潔に表現できます。
6. 注意点
繰り返し指定は貪欲マッチと呼ばれる動作になることがあります。なるべく短くマッチさせたい場合は ? を組み合わせて非貪欲に指定することも可能です。使いすぎると意図しない文字列にマッチする場合があるので、テストしながら確認しましょう。