正規表現
今回はオフィススクリプトにおける正規表現の体系的な使用方法について解説します。
正規表現の定義
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']