Так, например:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Но это, конечно, не работает :) Есть ли способ сделать это?
Так, например:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Но это, конечно, не работает :) Есть ли способ сделать это?
Ответы:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
За некоторыми из комментариев, важно отметить , что вы можете избежать в переменном , если есть потенциал для вредоносного содержимого (например , переменные приходит от пользовательского ввода)
В 2019 году это обычно пишется с использованием строки шаблона, и приведенный выше код был обновлен. Первоначальный ответ был:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
выражение
/\w+\//i
становитсяnew RegExp("\\w+/", "i")
Вы можете использовать объект RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Тогда вы можете строить regexstring
так, как хотите.
Вы можете прочитать больше об этом здесь .
Чтобы построить регулярное выражение из переменной в JavaScript, вам нужно использовать RegExp
конструктор со строковым параметром.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
конечно, это очень наивный пример. Предполагается, что input
он был правильно экранирован для регулярного выражения. Если вы имеете дело с пользовательским вводом или просто хотите сделать более удобным сопоставление специальных символов, вам нужно экранировать специальные символы :
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
текст. Поэтому я использовал:return new RegExp(input, flags);
если вы используете литералы шаблона es6 вариант ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); экспорт const validatePassword = значение => значение.match (newRegExp); `` `
Вы всегда можете дать регулярное выражение в виде строки, то есть "ReGeX" + testVar + "ReGeX"
. Возможно, вам придется экранировать некоторые символы внутри вашей строки (например, двойные кавычки), но в большинстве случаев это эквивалентно.
Вы также можете использовать RegExp
конструктор для передачи флагов ( см. Документацию ).
Вы можете создавать регулярные выражения в JS одним из двух способов:
/ab{2}/g
new RegExp("ab{2}", "g")
.Литералы регулярных выражений являются константами и не могут использоваться с переменными. Это может быть достигнуто с помощью конструктора. Структура конструктора RegEx
new RegExp(regularExpressionString, modifiersString)
Вы можете встраивать переменные как часть normalExpressionString. Например,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Это будет соответствовать любому внешнему виду шаблона cdcdcd
.
Вот довольно бесполезная функция, которая возвращает значения, заключенные в определенные символы. :)
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)
принятый ответ не работает для меня и не следует примерам MDN
см. раздел «Описание» в ссылке выше
Я бы сказал, что это работает для меня:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Необходимо только подготовить строковую переменную, а затем преобразовать ее в RegEx.
например:
Вы хотите добавить minLength
и MaxLength
с переменной для 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
}
Теперь, если вы измените значение MaxLength
или MinLength
, оно изменится во всех регулярных выражениях.
Надеюсь быть полезным. Также извините за мой английский.