【GAS】正規表現の使い方(検索・抽出・置換・分割)
Google Apps Script(GAS)を使っていると、データ処理する際に「この条件に一致する文字だけ抽出したい」といったシーンが頻繁に訪れますよね。表計算ソフト等では様々な機能で条件指定が充実していますが、GASのようなスクリプトだと正規表現を用いて指定するのが一番早かったりします。
この記事では、GASで使える正規表現一覧と正規表現を使える便利なメソッド(検索・抽出・置換・分割)のサンプルコードを紹介します。
正規表現とは
正規表現とは文字列のパターンを表記するための方法のことです。
郵便番号は【3桁の数字+ハイフン(-)+4桁の数字】、電話番号は【0から始まる3桁の数字+4桁の数字+4桁の数字】、等をイメージすると分かりやすいかもしれません。

パターンにマッチした文字列を検索、抽出、置換等を行うことができるため、GASに限らずプログラミングや表計算を使うときは正規表現を覚えておくと大変便利です。すべてのパターンは覚えられなくても、こう表現するとうまく条件指定できそうだ、と当たりがつけられるだけでも作業効率は大幅に改善するはずです。
GASで使用できる正規表現
文字 | 機能 | 正規表現例 | マッチする文字列例 |
---|---|---|---|
. | 任意の1文字 | A.C | ABC、AAC、ANC |
* | 直前の文字が0文字以上 | AB*C | AC、ABC、ABBBC |
+ | 直前の文字が1文字以上 | AB+C | ABC、ABBBC |
? | 直前の文字が0文字または1文字以上 | AB?C | AC、ABC |
{n} {n,} {n,m} | 直前の文字をn文字 直前の文字をn文字以上 直前の文字をn~m文字 | A{2} A{2,} A{2,4} | AA AA、AAAAAA AA、AAAAA |
| | または | ABC|DEF | ABC、DEF |
[] | []内のいずれかの文字 | [ABCDE] | A、B、C、D、E |
{} | グループ | {ABC}+ | ABCABC |
^ | 先頭 | ^A.* | ABC、AYZ |
$ | 末尾 | .*Z$ | XYZ、ABZ |
\ | メタ文字エスケープ | – | – |
\w | 任意の半角英字、数字、アンダースコア(_)のうち1文字 [A-Za-z0-9]と同じ | – | – |
\d | 数字の一文字 [0-9]と同じ | – | – |
\n | 改行 | – | – |
\r | 復帰 | – | |
\t | タブ | – | – |
\s | 空白文字(改行、復帰、タブ) | – | – |
正規表現で使える便利なGASメソッド
検索編
execメソッド
検索条件.exec(String)
execメソッドは指定した検索条件が含まれる文章と場所を検索してくれるメソッドです。実行結果は連想配列を含む配列で返してくれます。
//検索対象の文字列
let str = "吾輩は猫である。";
//条件
let regex = /猫/;
let result = regex.exec(str);
console.log(result);
[ '猫’, index: 3, input: '吾輩は猫である’, groups: undefined ]
matchメソッド
String.match(検索条件)
matchメソッドもexecメソッドと同様に、指定した検索条件が含まれる文章と場所を検索してくれるメソッドです。まずは同じ条件で実行してみましょう。
//検索対象の文字列
let str = "吾輩は猫である";
//条件
let regex = /猫/;
//matchメソッド
let result = str.match(regex);
console.log(result);
[ '猫’, index: 3, input: '吾輩は猫である’, groups: undefined ]
execメソッドのサンプルと同じ実行結果になりましたね。
execメソッドとmatchメソッドはオプションを指定しなければ、同じ実行結果を返します。matchメソッドでオプション指定したときの実行結果を見てみましょう。
//検索対象の文字列
let str = "吾輩は猫である。名前はまだない。";
//条件
let regex = /は/g;
//matchメソッド
let result = str.match(regex);
console.log(result);
[ 'は’, 'は’ ]
『"吾輩は猫である。名前はまだない。"』の文章の中に「は」という文字は2つ入っているので、両方ともマッチしてくれました。
matchメソッドについては下記の記事で詳細を解説しているのでぜひ確認してみてください。
searchメソッド
String.search(検索条件)
searchメソッドは、対象文字列から検索条件の場所を教えてくれます。
//検索対象の文字列
let str = "吾輩は猫である。";
//条件
let regex = /猫/;
let result = str.search(regex);
console.log(result);
3
「吾輩は猫である。」の中で「猫」は4番目(インデックスは3)という結果が返ってきました。
testメソッド
検索条件.test(String)
testメソッドは、検索条件が文字列の中に含まれていたらtrueを、含まれていなかったらfalseを返すバイナリーです。
//検索対象の文字列
let str = "吾輩は猫である。";
//条件
let regex = /猫/;
let result = regex.test(str);
console.log(result);
true
regex = /犬/;
result = regex.test(str);
console.log(result);
false
for文などで正規表現を使って条件指定したい時はtestメソッドが一番簡単そうですね。
抽出編
matchメソッド
String.match(抽出条件)
検索機能としても使ったmatchメソッドですが、文字列の抽出にも活用できます。実務ではこちらの目的で使う方が多いかもしれません。
ひらがな・漢字・数字が混在する文字列から数字だけ、ひらがなだけを抽出してみます。対象すべてを抽出するためにオプションフラグ「g」をつけています。
//検索対象の文字列
let str = "よしお1池崎5なべあつ9";
//数字だけ
let regex = /\d/g;
let result = str.match(regex);
console.log(result);
[ '1’, '5’, '9’ ]
//ひらがなだけ
regex = /[ぁ-ゟー]+|[゠-ヿ]+/g;
result = str.match(regex);
console.log(result);
[ 'よしお’, 'なべあつ’ ]
置換編
replaceメソッド
String.replace(“条件","置換文字列")
GASにおける文字列置換にはreplaceメソッドを使います(正規表現でも正規表現でなくてもOK)。正規表現を使って、「2桁の数字を1に置換」という処理を行ってみます。
//検索対象の文字列
let str = "11人目のストライカー";
//検索条件となる文字列
let regex = /\d{2}/;
let result = str.replace(regex,"1");
console.log(result);
1人目のストライカー
replaceメソッドに関する詳細は下記の記事ても解説しています。
分割編
splitメソッド
String.split(分割条件)
文字列の分割にはsplitメソッドを使用します。split関数は、文字列を分割している記号(「.」「/」「・」など)を1文字指定して使用することが多いですが、正規表現も活用できます。
//検索対象の文字列
let str = "霜降り,チョコプラ/さらば・ジャル 藤崎";
//検索条件となる文字列
let regex = /,|\/|・|\s/;
let result = str.split(regex);
console.log(result);
[ '霜降り’, 'チョコプラ’, 'さらば’, 'ジャル’, '藤崎’ ]
これでどんな分割のされ方をしていても対処できそうです。
まとめ
GASで使える正規表現一覧と正規表現を使える便利なメソッド(検索・抽出・置換・分割)をサンプルコードとともにご紹介しました。
正規表現を使えば、無駄なループ処理を削減し業務効率がぐっと向上します。ぜひマスターしてください。