web-dev-qa-db-fra.com

Modèle littéral à l'intérieur du RegEx

J'ai essayé de placer un modèle littéral à l'intérieur d'un RegEx, et cela n'a pas fonctionné. J'ai ensuite créé une variable regex qui contient mon RegEx, mais elle ne me donne toujours pas le résultat souhaité.

Cependant, si je console.log(regex) individuellement, je reçois le RegEx souhaité, tel que /.+?(?=location)/i, /.+?(?=date)/i et ainsi de suite, mais une fois que je place regex à l'intérieur de .replace il semble ne pas fonctionner

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

Votre variable regex est une chaîne . Pour en faire un RegExp, utilisez

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

En outre, c'est une bonne idée de échapper la variable faire partie de l'expression régulière afin que tous les métacaractères spéciaux d'expression régulière soient traités comme des littéraux.

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);
16
Wiktor Stribiżew