JavaScriptの正規表現における中括弧

演算子 '+'、'*'、'?' は便利ですが、特定の繰り返し回数を指定することはできません。 その場合に役立つのが演算子 {}です。

その動作は次のとおりです: {5} - 5回の繰り返し、{2,5} – 2回から5回までの繰り返し(両端を含む)、{2,} - 2回以上の繰り返し。{,2} のようなオプションはないことに注意してください。例を見てみましょう:

例

この例では、検索パターンは次のようになります: 文字 'x'、文字 'a' が1回または2回、 文字 'x':

javascriptlet str = 'xx xax xaax xaaax';
let res = str.replace(/xa{1,2}x/g, '!');

結果、変数には以下が書き込まれます:

javascript'xx ! ! xaaax'

例

この例では、検索パターンは次のようになります: 文字 'x'、文字 'a' が2回以上、 文字 'x':

javascriptlet str = 'xx xax xaax xaaax';
let res = str.replace(/xa{2,}x/g, '!');

結果、変数には以下が書き込まれます:

javascript'xx xax ! !'

例

この例では、検索パターンは次のようになります: 文字 'x'、文字 'a' が3回、 文字 'x':

javascriptlet str = 'xx xax xaax xaaax';
let res = str.replace(/xa{3}x/g, '!');

結果、変数には以下が書き込まれます:

javascript'xx xax xaax !'

例

この例では、検索パターンは次のようになります: 文字 'a' が10回:

javascriptlet str = 'aaa aaaaaaaaaa aaa';
let res = str.replace(/a{10}/g, '!');

結果、変数には以下が書き込まれます:

javascript'aaa ! aaa'

例

この例で、コードの作者は次のパターンを意図していました: 文字 'x'、文字 'a' が3回以下、 文字 'x'。 しかし、残念ながら {,3} は機能しません。 明示的に指定する必要があります:

javascriptlet str = 'xx xax xaax xaaax';
let res = str.replace(/xa{1,3}x/g, '!');

結果、変数には以下が書き込まれます:

javascript'xx ! ! !'

例

ゼロも許容されます:

javascriptlet str = 'xx xax xaax xaaax';
let res = str.replace(/xa{0,3}x/g, '!');

結果、変数には以下が書き込まれます:

javascript'! ! ! !'

実践問題

Задание 1

次の文字列が与えられます:

javascriptlet str = 'aa aba abba abbba abbbba abbbbba';

文字列 'abba'、'abbba'、'abbbba' のみを見つける正規表現を書いてください。

Задание 2

次の文字列が与えられます:

javascriptlet str = 'aa aba abba abbba abbbba abbbbba';

'b'が3回以下(含む)出現する 'aba' 形式の文字列を見つける正規表現を書いてください。

Задание 3

次の文字列が与えられます:

javascriptlet str = 'aa aba abba abbba abbbba abbbbba';

'b'が4回以上(含む)出現する 'aba' 形式の文字列を見つける正規表現を書いてください。