連載
» 2022年03月18日 05時00分 公開

文字列の「置換」を便利にする正規表現と「キャプチャグループ」ECMAScriptで学ぶ正規表現(3)

正規表現の基本と、ECMAScript(JavaScript)における利用方法を紹介する連載。今回は、キャプチャグループの指定方法と参照方法、マッチした部分の置換について。

[山内直(著)/山田祥寛(監修),WINGSプロジェクト]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「ECMAScriptで学ぶ正規表現」のインデックス

連載:ECMAScriptで学ぶ正規表現

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。具体的な利用方法は連載第1回を参考にしてください。

 文書作成で正規表現を使うメリットに、ふぞろいのパターンを見つけてそれを置換で整えたり、置換で順番を入れ替えたりすることが一気にできることがあります。今回は、文書作成の効率をアップする正規表現による置換を紹介していきます。

キャプチャグループの指定方法

 キャプチャグループとは、正規表現パターンの一部をメタ文字としての丸かっこ(……)で囲ったものをいいます。キャプチャとは「捕捉する」といった意味で、大きく以下の2つの目的で使用されます。

  • 数量詞(.や*など)を続けるために、リテラルやメタ文字などをグループ化する
  • マッチした文字列中で、その一部をそれぞれ別の文字列として取得する

 このように、キャプチャグループは非常に便利なものです。それぞれ見ていきましょう。

パターンの繰り返しを指定する

 第2回で取り上げた数量詞によって、リテラルやメタ文字などの項目の繰り返しを指定することができます。ここで、キャプチャグループを用いると、グループ化されたリテラルやメタ文字全体の繰り返しを指定できます。下記の「capture_group.js」では、文字列がインターネットのドメイン名を表すものかどうかチェックしています。

const regexp = /([\w-]+\.)+[\w-]+/;     (1)
const str1 = 'atmarkit.itmedia.co.jp';
console.log(str1.match(regexp));
  // (2) ['atmarkit.itmedia.co.jp', 'co.', index: 0, input: 'atmarkit.itmedia.co.jp', groups: undefined]
const str2 = 'atmarkit-itmedia-co-jp';  (2)
console.log(str2.match(regexp));        // null
capture_group.js

 マッチングにはmatch()メソッドを用いています。(1)では、ドメイン名の構成要素が1文字以上の英数字(アンダースコア(_)を含む)+ハイフン(-)と区切りとしてのドット(.)のみであるとして、それをキャプチャグループとして扱って繰り返しを指定しています。キャプチャグループを使わない場合、ドメイン名のドットの数の変化に対応することが難しくなりますが、これをシンプルなパターンで記述することができます。(2)では、同じく英数字とハイフンから構成されますが、ドットを含まないためドメインとは見なされていません。

マッチした部分をキャプチャする

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。