如何将变量传递给jQuery/Javascript中的正则表达式

77
在jQuery/JavaScript中是否有一种方法可以将变量传递到正则表达式中?
我想要做类似于这样的事情:
var variable_regex = "bar";
var some_string = "foobar";

some_string.match(/variable_regex/);

在 Ruby 中,您可以这样做:

some_string.match(/#{variable_regex}/)

发现一个有用的帖子:

如何在 JavaScript 中连接正则表达式字面量?


重复的问题:如何在正则表达式中使用变量?(链接:https://dev59.com/rnRB5IYBdhLWcg3w1Kr0) - Dan Dascalescu
4个回答

105

Javascript不支持像Ruby一样的插值--你必须使用RegExp构造函数:

var aString = "foobar";
var pattern = "bar";

var matches = aString.match(new RegExp(pattern));

19
如果我们想要应用正则表达式选项,可以这样做:使用'gi'参数创建正则表达式对象,如:new Regex(pattern, 'gi'),其中'g'代表全局匹配,'i'代表不区分大小写。 - Mike
4
@Mike的评论需要更正。正确的写法应该是new RegExp(pattern[,flags]),而不仅仅是Regex - Aizzat Suhardi
3
ES2015在模板字符串中支持表达式插值。 - Dan Dascalescu

45

很简单:

var variable_regex = "bar";
var some_string = "foobar";

some_string.match(variable_regex);

只需去掉 //。如果您想使用复杂的正则表达式,可以使用字符串连接:

var variable_regex = "b.";
var some_string = "foobar";

alert (some_string.match("f.*"+variable_regex));

2
我有一个复杂的正则表达式,我想将一个变量模式插入到硬编码表达式中进行插值,但我猜我只需将每个正则表达式排列设置为整个变量即可。 - cinematic
4
我认为你不能在这个版本中应用正则表达式选项(例如全局匹配、不区分大小写等)。我认为@Jonathan的回答比这个更合适。 - nzifnab
2
它也只能与匹配一起使用。其他调用,例如replace,需要明确构造正则表达式。 - bronson

16
创建一个带变量的RegExp实例十分简单。当我在寻找答案时,我也希望将此字符串与相应的变量插值。

可以在浏览器控制台中尝试:

const b = 'b';
const result = (new RegExp(`^a${b}c$`)).test('abc');

console.log(result);


-7

在编程中,将变量包含在字符串中的另一种方法是使用字符串插值。在JavaScript中,您可以使用模板字面量在字符串中插入或插值变量:

var name = "Jack";
var id = 123321;

console.log(`Hello, ${name} your id is ${id}.`);

注意:请不要混淆引号或撇号与重音符号(`)。

您可以在函数中使用:

function myPhrase(name, id){
   return `Hello, ${name} your id is ${id}.`;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接