2017-04-13 7 views
4

テンプレートリテラルをRegEx内に配置しようとしましたが、機能しませんでした。私はその後、RegExを保持する変数regexを作成しましたが、それでも私は希望の結果を得られませんでした。RegExのテンプレートリテラル

しかし、私は個別console.log(regex)場合、私は上のような/.+?(?=location)/i/.+?(?=date)/iとの希望正規表現を受け取りますが、私は.replaceregexを置いたら、それは

function validate (data) { 
    let testArr = Object.keys(data); 
    errorMessages.forEach((elem, i) => { 
    const regex = `/.+?(?=${elem.value})/i`; 
    const a = testArr[i].replace(regex, ''); 
    }) 
    } 

答えて

5

あなたregex変数を作業することがないように見えます文字列です。全ての特別な正規表現のメタ文字がリテラルとして扱われたように、それ正規表現にするために、

const regex = new RegExp(`.+?(?=${elemvalue.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')})`, "i"); 

を使用しても、それは正規表現でescape the variable一部には良いアイデアです。

const s = "final (location)"; 
 
const elemvalue = "(location)"; 
 
const regex = new RegExp(`.+?(?=${elemvalue.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')})`, "i"); 
 
// console.log(regex); // /.+?(?=\(location\))/i 
 
// console.log(typeof(regex)); // object 
 
let a = s.replace(regex, ''); 
 
console.log(a);

関連する問題