jsの正規表現で変数を使いたい
jsで正規表現を使う際に変数の値を利用するにはコンストラクターでRegExpオブジェクトを生成する必要がある。
また、コンストラクターで生成する場合は特殊文字のエスケープが必須になる。
正規表現が複雑になってくるとエスケープだらけで何をやっているかが分かりづらくなってしまうため、テンプレートリテラル(``)を使って変数展開をしつつリテラル記法(//)のように書けないか調べてみたところ、String.rawと組み合わせることで実現できることが分かった。
サンプルコードは↓
const sampleStr = "2020-09-28:$3";
const price = "3";
// const sampleRegExp = new RegExp('^\\d{4}-\\d{2}-\\d{2}:\\$' + price + '$');
// const sampleRegExp = new RegExp(`^\\d{4}-\\d{2}-\\d{2}:\\$${price}$`);
const sampleRegExp = new RegExp(String.raw`^\d{4}-\d{2}-\d{2}:\$${price}$`);
if (sampleStr.match(sampleRegExp)) {
console.log("match");
}
// => match