教えて!GAS!

GASの基礎知識・書き方について紹介します。

Google Apps Scriptでの正規表現の種類

正規表現とは、文字列の検索や置換に使用されます。正規表現では様々なパターンを表現する事ができ、それを用いる事でテキストの中から特定のパターンの文字列を検索・抽出・置換等の操作をする事ができます。

正規表現一覧

主な正規表現を紹介します。

メンバー 説明
.(ドット) 任意の1文字と一致します。(改行を除く)
^(キャレット) 文字列の先頭に一致します。
$(ドル) 文字列の末尾に一致します。
*(アスタリスク) 直前の文字が0回以上繰り返される部分に一致します。
+(プラス) 直前の文字が1回以上繰り返される部分に一致します。
?(クエスチョンマーク) 直前の文字が0回または1回繰り返される部分に一致します。
{n}(中括弧) 直前の文字がちょうどn回繰り返される部分に一致します。
{n,} 直前の文字がn回以上繰り返される部分に一致します。
{n,m} 直前の文字がn回からm回の間繰り返される部分に一致します。
(角括弧) 角括弧内のいずれか1文字に一致します。
[^] 角括弧内に含まれない任意の1文字に一致します。
\(バックスラッシュ) メタ文字をエスケープする際に使用します。また、特定のシーケンスとして使用される場合もあります。(例: \d は数字に一致)
\d 数字に一致します。
\D 数字以外の任意の文字に一致します。
\w 英数字やアンダースコアに一致します。
\W 英数字やアンダースコア以外の任意の文字に一致します。
\s 空白文字に一致します。(スペース、タブ、改行など)
\S 空白文字以外の任意の文字に一致します。
|(パイプ) 選択肢のいずれかに一致します。(論理和)
()(丸括弧) 部分文字列をグループ化します。また、キャプチャグループとして使用されます。
\b 単語の境界に一致します。
\B 単語の境界以外に一致します。

プログラミング例

具体的なプログラミング例を紹介します。

.(ドット)

function ドット例() {
    let テキスト = "a1b2c3";
    let パターン = /./g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["a", "1", "b", "2", "c", "3"]
}

^(キャレット)

function キャレット例() {
    let テキスト = "Hello world";
    let パターン = /^Hello/;
    let 結果 = パターン.test(テキスト);
    console.log(結果); // true
}

$(ドル)

function ドル例() {
    let テキスト = "Hello world";
    let パターン = /world$/;
    let 結果 = パターン.test(テキスト);
    console.log(結果); // true
}

*(アスタリスク)

function アスタリスク例() {
    let テキスト = "aaabbb";
    let パターン = /a*b*/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["aaabbb"]
}

+(プラス)

function プラス例() {
    let テキスト = "aaabbb";
    let パターン = /a+b+/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["aaabbb"]
}

?(クエスチョンマーク)

function クエスチョンマーク例() {
    let テキスト = "color";
    let パターン = /colou?r/;
    let 結果 = パターン.test(テキスト);
    console.log(結果); // true
}

{n}(中括弧)

function 中括弧n例() {
    let テキスト = "aaabbb";
    let パターン = /a{3}/;
    let 結果 = パターン.test(テキスト);
    console.log(結果); // true
}

{n,}(中括弧,)

function 中括弧nカンマ例() {
    let テキスト = "aaa";
    let パターン = /a{2,}/;
    let 結果 = パターン.test(テキスト);
    console.log(結果); // true
}

{n,m}(中括弧n,m)

function 中括弧nm例() {
    let テキスト = "aaab";
    let パターン = /a{2,3}/;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["aaa"]
}

(角括弧)

function 角括弧例() {
    let テキスト = "abc123";
    let パターン = /[a-c]/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["a", "b", "c"]
}

[^](否定角括弧)

function 否定角括弧例() {
    let テキスト = "abc123";
    let パターン = /[^a-c]/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["1", "2", "3"]
}

\(バックスラッシュ)

function バックスラッシュ例() {
    let テキスト = "1+1=2";
    let パターン = /\+/;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["+"]
}

\d

function 数字例() {
    let テキスト = "abc123";
    let パターン = /\d/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["1", "2", "3"]
}

\D

function 数字以外例() {
    let テキスト = "abc123";
    let パターン = /\D/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["a", "b", "c"]
}

\w

function 英数字例() {
    let テキスト = "abc_123";
    let パターン = /\w/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["a", "b", "c", "_", "1", "2", "3"]
}

\W

function 英数字以外例() {
    let テキスト = "abc_123!";
    let パターン = /\W/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["!"]
}

\s

function 空白文字例() {
    let テキスト = "a b c";
    let パターン = /\s/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // [" ", " "]
}

\S

function 空白以外例() {
    let テキスト = "a b c";
    let パターン = /\S/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["a", "b", "c"]
}

|(パイプ)

function パイプ例() {
    let テキスト = "abc";
    let パターン = /a|b|c/g;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["a", "b", "c"]
}

()(丸括弧)

function 丸括弧例() {
    let テキスト = "abc123";
    let パターン = /(abc)(123)/;
    let 結果 = テキスト.match(パターン);
    console.log(結果); // ["abc123", "abc", "123"]
}

\b

function 単語境界例() {
    let テキスト = "hello world";
    let パターン = /\bworld\b/;
    let 結果 = パターン.test(テキスト);
    console.log(結果); // true
}

\B

function 非単語境界例() {
    let テキスト = "hello world";
    let パターン = /\Bworld\B/;
    let 結果 = パターン.test(テキスト);
    console.log(結果); // false
}

まとめ

正規表現は、文字列のパターン検索や置換に非常に便利です。フラグを組み合わせることで、より高度な検索が可能になります。