質問: inp; ``` 上記のように正規表現の中に変数を代入していますが、 これが動きません。 RegExpの使い方自体が間違っているのでしょうか。 ※上記の変数[rep]を入れている箇所に数値を自分で入力すると、 正常に入力した値通りカンマがつけられます。 教えていただけないでしょうか。 宜しくお願い致します。
回答: 正規表現リテラルに変数を展開する機能はありません。動的に正規表現を生成する場合、`RegExp`コンストラクタを用いた方法が一般的です。 > > RegExp コンストラクタは、パターンに従ったテキストにマッチする正規表現オブジェクトを生成します。 > > > ### 構文 > > > リテラル記法およびコンストラクタ記法を使用できます: > > > > ``` > /pattern/flags > new RegExp(pattern[, flags]) > > ``` > > ``` const rep = 3; // for example const patternString = `(\\d)(?=(\\d{${rep}})+$)`; // この例では、リテラルでいう /(\d)(?=(\d{3})+$)/gに // 相当するRegExpオブジェクトを生成します const regex = new RegExp(patternString, 'g'); const result = '123456789'.replace(regex, '$1,'); console.assert(result === '123,456,789'); ``` テンプレートリテラルをご存じでなければ、`patternString`の行はつぎに等価です。 ``` const patternString = '(\\d)(?=(\\d{' + rep + '})+$)'; ``` 参考までに、質問の箇所はともかく、話題としてはさんざん掘りつくされたネタ(例:How to print a number with commas as thousands separators in JavaScript)ですので、検索してみるといろいろなアプローチが見つかるとおもいます。