Ainsi, par exemple:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Mais cela ne fonctionne bien sûr pas :) Existe-t-il un moyen de procéder?
Ainsi, par exemple:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Mais cela ne fonctionne bien sûr pas :) Existe-t-il un moyen de procéder?
Réponses:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Selon certains des commentaires, il est important de noter que vous pouvez vouloir échapper à la variable s'il y a un potentiel de contenu malveillant (par exemple, la variable provient de la saisie de l'utilisateur)
En 2019, cela serait généralement écrit à l'aide d'une chaîne de modèle, et le code ci-dessus a été mis à jour. La réponse originale était:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
expression
/\w+\//i
devientnew RegExp("\\w+/", "i")
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 vous le souhaitez.
Vous pouvez en savoir plus ici .
Pour créer une expression régulière à partir d'une variable en JavaScript, vous devrez utiliser le RegExp
constructeur 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, c'est un exemple très naïf. Il suppose qu'il 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 mise en correspondance de caractères spéciaux, vous devrez échapper les 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);
}
ReGeX
texte. J'ai donc utilisé:return new RegExp(input, flags);
si vous utilisez le modèle es6, les littéraux sont une option ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); export const validatePassword = value => value.match (newRegExp); ``
Vous pouvez toujours donner une expression régulière sous forme de chaîne, c'est-à-dire "ReGeX" + testVar + "ReGeX"
. Vous devrez peut-être échapper certains caractères à l'intérieur de votre chaîne (par exemple, les guillemets doubles), mais dans la plupart des cas, c'est équivalent.
Vous pouvez également utiliser le RegExp
constructeur pour passer des drapeaux ( voir la documentation ).
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'expression régulière sont constants et ne peuvent pas être utilisés avec des variables. Cela 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 correspondra à toute apparence du motif cdcdcd
.
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)
la réponse acceptée ne fonctionne pas pour moi et ne suit pas les exemples MDN
voir la section «Description» dans le lien ci-dessus
J'irais avec ce qui suit, cela fonctionne 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 de chaîne, puis de la convertir en RegEx.
par exemple:
Vous souhaitez 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. Désolé aussi pour mon anglais.