メインコンテンツまでスキップ

正規表現

今回はオフィススクリプトにおける正規表現の体系的な使用方法について解説します。

正規表現の定義

Office スクリプトで正規表現を使用する場合、スラッシュで囲った正規表現リテラル(//)を定義するか、 RegExpオブジェクトを使用します。

どちらも同じオブジェクトが作成されますが、正規表現内に変数を使用したい場合や、ユーザーからの入力を元に正規表現を動的に生成する場合は、RegExpオブジェクトのインスタンスでのみ実現できます。

正規表現の定義サンプル
/** 2桁の数字にのみマッチする正規表現 */
const regexp1 = /^[0-9]{2}$/;

/** 「value」から始まる文字列にマッチする正規表現 */
const regexp2 = new RegExp(`^value.*`);

正規表現と文字列の一致チェック

RegExp.test メソッドを使用した場合

単純に正規表現と指定された文字列が一致するかを調べるだけであれば、RegExp.testメソッドを使用します。

RegExp.testは引数に文字列を指定し、正規表現と一致していれば true を返します。

testメソッドを使った一致チェック
/** 2桁の数字にのみマッチする正規表現 */
const regexp = /^[0-9]{2}$/;

console.log(regexp.test('23')); // true

console.log(regexp.test('2022')); // false

String.search メソッドを使用した場合

String.searchメソッドでも、文字列の一致チェックを行えます。

String.searchは引数に正規表現を渡すことができ、一致したインデックス(何文字目か)を返します。

testメソッドを使った一致チェック
/** 文字列中に2桁の数字があればマッチする正規表現 */
const regexp = /[0-9]{2}/;

console.log('本日は17日です'.search(regexp)); // 3

正規表現を使った文字列の置換

正規表現にマッチする文字列を別の文字列と置き換えるには、String.replaceメソッドの引数に正規表現を使用します。

replaceメソッドを使った文字列の置換
/** 先頭の「value」 */
const regexp = new RegExp('^value');

const replaced = 'value-content-value'.replace(regexp, 'item'); // item-content-value

正規表現リテラルの末尾にgを付けた場合は、対象文字列全体を通してマッチする文字列を探し、複数回マッチする可能性があります。

正規表現を使った文字列の分割

正規表現にマッチする文字列を基準に文字列を分割するには、String.splitメソッドの引数に正規表現を使用します。

splitメソッドを使った文字列の分割
/** スラッシュにマッチする正規表現 */
const regexp = /\//;

const splitted = '2022/3/17'.split(regexp); // ['2022', '3', '17']