JavaScriptの正規表現における中括弧
演算子 '+'、'*'、'?'
は便利ですが、特定の繰り返し回数を指定することはできません。
その場合に役立つのが演算子 {}です。
その動作は次のとおりです: {5}
- 5回の繰り返し、{2,5} – 2回から5回までの繰り返し(両端を含む)、{2,}
- 2回以上の繰り返し。{,2}
のようなオプションはないことに注意してください。例を見てみましょう:
例
この例では、検索パターンは次のようになります:
文字 'x'、文字 'a' が1回または2回、
文字 'x':
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{1,2}x/g, '!');
結果、変数には以下が書き込まれます:
'xx ! ! xaaax'
例
この例では、検索パターンは次のようになります:
文字 'x'、文字 'a' が2回以上、
文字 'x':
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{2,}x/g, '!');
結果、変数には以下が書き込まれます:
'xx xax ! !'
例
この例では、検索パターンは次のようになります:
文字 'x'、文字 'a' が3回、
文字 'x':
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{3}x/g, '!');
結果、変数には以下が書き込まれます:
'xx xax xaax !'
例
この例では、検索パターンは次のようになります:
文字 'a' が10回:
let str = 'aaa aaaaaaaaaa aaa';
let res = str.replace(/a{10}/g, '!');
結果、変数には以下が書き込まれます:
'aaa ! aaa'
例
この例で、コードの作者は次のパターンを意図していました:
文字 'x'、文字 'a' が3回以下、
文字 'x'。
しかし、残念ながら {,3} は機能しません。
明示的に指定する必要があります:
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{1,3}x/g, '!');
結果、変数には以下が書き込まれます:
'xx ! ! !'
例
ゼロも許容されます:
let str = 'xx xax xaax xaaax';
let res = str.replace(/xa{0,3}x/g, '!');
結果、変数には以下が書き込まれます:
'! ! ! !'
実践問題
次の文字列が与えられます:
let str = 'aa aba abba abbba abbbba abbbbba';
文字列 'abba'、'abbba'、'abbbba'
のみを見つける正規表現を書いてください。
次の文字列が与えられます:
let str = 'aa aba abba abbba abbbba abbbbba';
'b'が3回以下(含む)出現する
'aba' 形式の文字列を見つける正規表現を書いてください。
次の文字列が与えられます:
let str = 'aa aba abba abbba abbbba abbbbba';
'b'が4回以上(含む)出現する
'aba' 形式の文字列を見つける正規表現を書いてください。