Javascript正则表达式:如何将变量放入正则表达式中?
例如:Javascript正则表达式:如何将变量放入正则表达式中?,javascript,regex,variables,Javascript,Regex,Variables,例如: function(input){ var testVar = input; string = ... string.replace(/ReGeX + testVar + ReGeX/, "replacement") } 但这当然行不通:) 有什么方法可以做到这一点吗?您可以始终将正则表达式设置为字符串,即“ReGeX”+testVar+“ReGeX”。您可能需要转义字符串中的某些字符(例如,双引号),但在大多数情况下,它是等效的 您还可以使用RegExp构造函数
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然行不通:)
有什么方法可以做到这一点吗?您可以始终将正则表达式设置为字符串,即
“ReGeX”+testVar+“ReGeX”
。您可能需要转义字符串中的某些字符(例如,双引号),但在大多数情况下,它是等效的
您还可以使用RegExp
构造函数在()中传递标志
更新
根据一些评论,重要的是要注意,如果存在潜在的恶意内容(例如,变量来自用户输入),则可能需要删除该变量
ES6更新
2019年,这通常使用模板字符串编写,并且上述代码已经更新。原来的答案是:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
您可以使用RegExp对象:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
然后,您可以以任何方式构造regexstring
您可以阅读更多信息。要从JavaScript中的变量构建正则表达式,您需要使用带字符串参数的构造函数
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
当然,这是一个非常幼稚的例子。它假定正则表达式的input
is已正确转义。如果您正在处理用户输入,或者只是想更方便地匹配特殊字符,则需要:
这是一个非常无用的函数,它返回由特定字符包装的值。:) jsfiddle: 函数getValsWrappedIn(str,c1,c2){ var rg=new RegExp(“(?如果您使用的是es6是一个选项…”
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
接受的答案对我不起作用,也不符合我的要求 请参阅上述链接中的“说明”部分 我想说的是,这对我很有用:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
您可以通过以下两种方式之一在JS中创建正则表达式:
/ab{2}/g
newregexp(“ab{2}”,“g”)
new RegExp(regularExpressionString, modifiersString)
您可以将变量作为regularExpressionString的一部分嵌入。例如
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
这将匹配模式的任何外观
cdcdcd
只需先准备字符串变量,然后将其转换为正则表达式即可
例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
您想将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
的值,它将在所有正则表达式中更改
希望有用。我的英语也很抱歉。请注意,如果您让用户提供此变量,恶意用户很容易通过灾难性回溯使您的应用程序崩溃。什么是“ReGeX”?它是变量名吗?它暗示它是RegExp构造的一部分,从而使答案混淆(以防读者没有看到问题中那些奇怪的字符)var characterCount=parseInt(attrs.limitCharacterCount);console.log(characterCount);var specialCharactersValidation=new RegExp(“/^[a-zA-Z0-9]{“+characterCount+”}$/”;/\/^[a-zA-Z0-9]{7}$\//RequestShipmentDirections.js:76 false main.js:46 Uncaught TypeError:无法读取null的属性'offsetWidth'。这是在我将正则表达式设置为动态时发生的情况。请确保转义您的字符串!请参阅@zzzzBov answer这在我的情况下不起作用,您能看一看,并让我知道如果我想设置国家/地区,我必须做些什么吗将代码动态转换为
regex
expression需要记住的一件重要事情是,在正则字符串中,\字符需要转义,而在regex文本中,/字符(通常)需要转义。因此/\w+\//i
成为新的RegExp(“\\w+/”,“i”)
如何处理/g?伙计们,我需要拆分这个regex/[^0-9.]/g由两部分组成:/[^0-9和-]/g如何做?对我来说唯一有效的方法是删除ReGeX
文本。因此我使用:返回新的RegExp(输入,标志);
@MichaelRader,是的,“ReGeX”"文本是问题的一部分,并用作示例,而不是使代码正常工作所需的东西。lol刚刚意识到这只是您的占位符,但作为一个noob,我花了一段时间才弄明白。谢谢。我理解为什么需要对字符串进行转义。但为什么使用“\\$&”替换\\\
表示单个\
>问题是'ReGeX'+testVar+'ReGeX'会让解决方案变得混乱。在我看来,添加一个实际的例子会让事情变得更清楚。var testVar='321';var ReGeX=new RegExp(“[”+testVar+“]{2}”,“g”);//以上等价于/[321]{2}/git不适用于模板文本。我在应用程序中使用regexp验证密码,我想参数化正则表达式字符串中的最大和最小长度,但它不起作用。``const newRegExp=newRegExp(^[^\s]{${4},${32}$
);export const validatePassword=value=>value.match(newRegExp)```
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
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
}