如何在jQuery/Javascript中将变量传递给regex

43 regex jquery match

有没有办法将变量传递给jQuery/Javascript中的正则表达式?

我想做的事情如下:

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

some_string.match(/variable_regex/);
Run Code Online (Sandbox Code Playgroud)

在Ruby中你可以做到:

some_string.match(/#{variable_regex}/)

找到一个有用的帖子:

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

Jon*_*ski 67

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

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

var matches = aString.match(new RegExp(pattern));
Run Code Online (Sandbox Code Playgroud)

  • 在我们想要应用正则表达式选项的情况下,我们可以这样做:新的正则表达式(模式,'gi')用于全局,不区分大小写. (12认同)
  • @Mike 的评论需要更正。它应该是 `new RegExp(pattern[, flags])` 而不仅仅是 **Regex** (3认同)
  • ES2015支持在模板字符串中进行表达式插值。 (2认同)

小智 26

这很简单:

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

some_string.match(variable_regex);
Run Code Online (Sandbox Code Playgroud)

只是失去了//.如果要使用复杂的正则表达式,可以使用字符串连接:

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

alert (some_string.match("f.*"+variable_regex));
Run Code Online (Sandbox Code Playgroud)

  • 我不认为您可以在此版本中应用正则表达式选项(例如,全局,不区分大小写).我会说@ Jonathan的答案比这个更合适. (4认同)
  • 我有一个复杂的正则表达式,我想将变量模式插入到硬编码表达式中,但我想我只是将每个正则表达式排列设置为一个完整的变量。 (2认同)
  • 它也只适用于匹配。其他调用,如替换,需要显式构造正则表达式。 (2认同)

Pur*_*lex 16

这很简单,您需要创建一个RegExp带有变量的实例。当我搜索答案时,我还希望用相关变量对该字符串进行插值。

在浏览器控制台中尝试一下:

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

console.log(result);
Run Code Online (Sandbox Code Playgroud)