Então, por exemplo:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Mas é claro que isso não está funcionando :) Existe alguma maneira de fazer isso?
Então, por exemplo:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Mas é claro que isso não está funcionando :) Existe alguma maneira de fazer isso?
Respostas:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Por alguns dos comentários, é importante observar que você pode querer escapar da variável se houver potencial para conteúdo malicioso (por exemplo, a variável vem da entrada do usuário)
Em 2019, isso geralmente seria escrito usando uma string de modelo, e o código acima foi atualizado. A resposta original foi:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
expressão
/\w+\//i
tornanew RegExp("\\w+/", "i")
Você pode usar o objeto RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Então você pode construir regexstring
da maneira que quiser.
Você pode ler mais sobre isso aqui .
Para criar uma expressão regular a partir de uma variável em JavaScript, você precisará usar o RegExp
construtor com um parâmetro string.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
claro, este é um exemplo muito ingênuo. Supõe que input
foi escapado adequadamente para uma expressão regular. Se você está lidando com a entrada do usuário ou simplesmente deseja torná-lo mais conveniente para combinar caracteres especiais, precisará escapar de caracteres especiais :
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. Então eu usei:return new RegExp(input, flags);
se você estiver usando literais de modelo es6, é uma opção ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); exportar const validatePassword = value => value.match (newRegExp); ``
Você sempre pode dar expressão regular como string, ou seja "ReGeX" + testVar + "ReGeX"
. Você possivelmente terá que escapar de alguns caracteres dentro de sua string (por exemplo, aspas duplas), mas na maioria dos casos é equivalente.
Você também pode usar o RegExp
construtor para passar sinalizadores ( consulte a documentação ).
Você pode criar expressões regulares em JS de uma das duas maneiras:
/ab{2}/g
new RegExp("ab{2}", "g")
.Literais de expressão regular são constantes e não podem ser usadas com variáveis. Isso pode ser alcançado usando o construtor. A estrutura do construtor RegEx é
new RegExp(regularExpressionString, modifiersString)
Você pode incorporar variáveis como parte do regularExpressionString. Por exemplo,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Isso corresponderá a qualquer aparência do padrão cdcdcd
.
Aqui está uma função bastante inútil que retorna valores agrupados 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)
resposta aceita não funciona para mim e não segue exemplos MDN
consulte a seção "Descrição" no link acima
Eu iria com o seguinte está funcionando para mim:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Só é necessário preparar a variável de sequência primeiro e depois convertê-la no RegEx.
por exemplo:
Você deseja adicionar minLength
e MaxLength
com a variável ao 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
}
agora, se você alterar o valor de MaxLength
ou MinLength
, ele será alterado em todos os RegExs.
Espero ser útil. Também sinto muito pelo meu inglês.