既知のパターンがある場合 (つまり、変数を使用して RegExp を作成しない場合) は常に、特殊な正規表現メタ文字をエスケープするために1 つのバックスラッシュのみを使用する必要があるリテラル正規表現を使用します。
var re = /I like your Apartment\. Could we schedule a viewing\?/g;
^^ ^^
動的に RegExp を構築する必要があるときはいつでも、リテラルのバックスラッシュを示すためにバックスラッシュを 2 つ使用しなければならないRegExp
コンストラクター表記法を使用します。
var questionmark_block = "\\?"; // A literal ?
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot
var re = new RegExp(initial_subpattern + questionmark_block, "g");
また、String.raw
文字列リテラルを使用する場合は、そのまま使用できます\
(変数を正規表現パターンに入れることができるテンプレート文字列リテラルの使用例を参照してください)。
const questionmark_block = String.raw`\?`; // A literal ?
const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables
console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g
必読: RegExp: Description at MDN.