Así por ejemplo:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Pero esto, por supuesto, no funciona :) ¿Hay alguna manera de hacer esto?
Así por ejemplo:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Pero esto, por supuesto, no funciona :) ¿Hay alguna manera de hacer esto?
Respuestas:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Según algunos de los comentarios, es importante tener en cuenta que es posible que desee escapar de la variable si existe la posibilidad de contenido malicioso (por ejemplo, la variable proviene de la entrada del usuario)
En 2019, esto generalmente se escribiría usando una cadena de plantilla, y el código anterior se ha actualizado. La respuesta original fue:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
expresión dinámica de código de país?
/\w+\//i
conviertenew RegExp("\\w+/", "i")
Puede usar el objeto RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Entonces puedes construir regexstring
de la forma que quieras.
Puedes leer más sobre esto aquí .
Para construir una expresión regular a partir de una variable en JavaScript, deberá usar el RegExp
constructor con un parámetro de cadena.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
Por supuesto, este es un ejemplo muy ingenuo. Se supone que input
se ha escapado correctamente para una expresión regular. Si está tratando con la entrada del usuario, o simplemente desea que sea más conveniente que coincida con caracteres especiales, deberá escapar de caracteres especiales :
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
texto. Entonces solía:return new RegExp(input, flags);
si está utilizando los literales de plantilla es6 son una opción ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); export const validatePassword = value => value.match (newRegExp); `` `
Siempre puede dar una expresión regular como cadena, es decir "ReGeX" + testVar + "ReGeX"
. Posiblemente tenga que escapar de algunos caracteres dentro de su cadena (por ejemplo, comillas dobles), pero en la mayoría de los casos es equivalente.
También puede usar el RegExp
constructor para pasar banderas ( ver los documentos ).
Puede crear expresiones regulares en JS de una de dos maneras:
/ab{2}/g
new RegExp("ab{2}", "g")
.Los literales de expresión regular son constantes y no se pueden usar con variables. Esto podría lograrse utilizando el constructor. La extracción del constructor RegEx es
new RegExp(regularExpressionString, modifiersString)
Puede incrustar variables como parte de regularExpressionString. Por ejemplo,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Esto coincidirá con cualquier apariencia del patrón cdcdcd
.
Aquí hay una función bastante inútil que devuelve valores envueltos por caracteres específicos. :)
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 respuesta aceptada no funciona para mí y no sigue los ejemplos de MDN
ver la sección 'Descripción' en el enlace de arriba
Iría con lo siguiente, me está funcionando:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Solo es necesario preparar primero la variable de cadena y luego convertirla a RegEx.
por ejemplo:
Desea agregar minLength
y MaxLength
con la variable a 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
}
ahora si cambia el valor de MaxLength
o MinLength
, cambiará en todos los RegExs.
Espero ser de utilidad. También lamento mi inglés.