Donc par exemple:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Mais cela ne fonctionne bien entendu pas:).
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
Pour certains des commentaires, il est important de noter que vous pouvez souhaiter échapper la variable s'il existe un potentiel de contenu malveillant (par exemple, la variable provient d'une entrée utilisateur)
Vous pouvez utiliser l'objet RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Ensuite, vous pouvez construire regexstring
comme bon vous semble.
Vous pouvez en lire plus à ce sujet ici .
Pour créer une expression régulière à partir d'une variable en JavaScript, vous devez utiliser le constructeur RegExp
avec un paramètre de chaîne.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
bien sûr, ceci est un exemple très naïf. Il suppose que input
a été correctement échappé pour une expression régulière. Si vous avez affaire à une saisie utilisateur ou si vous souhaitez simplement faciliter la correspondance des caractères spéciaux, vous devez échapper aux caractères spéciaux :
function regexEscape(str) {
return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
}
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
input = regexEscape(input);
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
Vous pouvez toujours donner une expression régulière sous forme de chaîne, c'est-à-dire "ReGeX" + testVar + "ReGeX"
. Vous devrez éventuellement échapper des caractères dans votre chaîne (par exemple, une citation double), mais dans la plupart des cas, cela équivaut à.
Vous pouvez également utiliser le constructeur RegExp
pour passer des indicateurs ( voir la documentation ).
si vous utilisez es6 template literals are a option ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
réponse acceptée ne fonctionne pas pour moi et ne suit pas exemples MDN
voir la section 'Description' dans le lien ci-dessus
J'irais avec ce qui suit ça marche pour moi:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Il suffit de préparer d'abord la variable chaîne, puis de la convertir en RegEx.
par exemple:
Vous voulez ajouter minLength
et MaxLength
avec la variable à RegEx:
function getRegEx() {
const minLength = "5"; // for exapmle: min is 5
const maxLength = "12"; // for exapmle: man is 12
var regEx = "^.{" + minLength + ","+ maxLength +"}$"; // first we make a String variable of our RegEx
regEx = new RegExp(regEx, "g"); // now we convert it to RegEx
return regEx; // In the end, we return the RegEx
}
maintenant si vous changez la valeur de MaxLength
ou MinLength
, cela changera dans tous les RegEx.
J'espère être utile. Aussi désolé pour mon anglais.
Voici une fonction assez inutile qui retourne des valeurs enveloppées par des caractères spécifiques. :)
jsfiddle: https://jsfiddle.net/squadjot/43agwo6x/
function getValsWrappedIn(str,c1,c2){
var rg = new RegExp("(?<=\\"+c1+")(.*?)(?=\\"+c2+")","g");
return str.match(rg);
}
var exampleStr = "Something (5) or some time (19) or maybe a (thingy)";
var results = getValsWrappedIn(exampleStr,"(",")")
// Will return array ["5","19","thingy"]
console.log(results)
Vous pouvez créer des expressions régulières dans JS de deux manières:
/ab{2}/g
new RegExp("ab{2}", "g")
. Les littéraux d'expressions régulières sont constants et ne peuvent pas être utilisés avec des variables. Ceci pourrait être réalisé en utilisant le constructeur. La structure du constructeur RegEx est
new RegExp(regularExpressionString, modifiersString)
Vous pouvez incorporer des variables dans le cadre de regularExpressionString. Par exemple,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Cela correspond à n'importe quelle apparence du motif cdcdcd
.