JavaScriptの正規表現における非キャプチャ括弧
括弧 ( ) は2つの機能を持っています -
文字のグループ化とキャプチャグループとしての機能です。
では、グループ化したいがキャプチャはしたくない場合、
どうすればよいでしょうか?
このような問題を解決するために、
非キャプチャ括弧 (?: )
が特別に考案されました - これらはグループ化しますが、
キャプチャグループには入れません。
例
次の例では、最初の括弧はグループ化のために、 2番目の括弧はキャプチャのために必要です。 しかし、どちらの括弧もデータをキャプチャグループに 保存してしまいます:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
結果、キャプチャグループには次の内容が入ります:
console.log(res[0]); // 'abab123' と出力
console.log(res[1]); // 'ab' と出力
console.log(res[2]); // '123' と出力
例
最初の括弧ペアがグループ化のみを行い、 キャプチャしないようにしてみましょう:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
結果、最初のキャプチャグループには数値が入ります:
console.log(res[1]); // '123' と出力