如何将变量放入正则表达式匹配?

som*_*lse 33 javascript regex

我有

var string1 = 'asdgghjajakhakhdsadsafdgawerwweadf';
var string2 = 'a';
string1.match("\/"+string2+"\/g").length;
Run Code Online (Sandbox Code Playgroud)

所以有了这个,我想找到一个a的吸引力,但它不是wirking,我怎么能把变量wright?

use*_*716 53

您需要使用RegExp构造函数而不是正则表达式文字.

var string = 'asdgghjjkhkh';
var string2 = 'a';
var regex = new RegExp( string2, 'g' );
string.match(regex);
Run Code Online (Sandbox Code Playgroud)

如果你不需要全局修饰符,那么你可以通过string2,并.match()为你创建正则表达式.

string.match( string2 );
Run Code Online (Sandbox Code Playgroud)

  • 您可能希望将变量与字符串组合在一起.在这种情况下,任何转义字符都应该双重转义.如果你想匹配一个后跟数字的"a":`var str ="abca1cba3a"; var search ="a"; var re = new RegExp(search +'\\ d','g'); str.match(RE); //结果:['a1','a3']` (5认同)

Hol*_*ger 8

如果您只是想检查一个字符串是否包含另一个字符串,那么最好的选择就是不使用正match()则表达式。

您可能会反对:但我需要一个正则表达式来检查类,例如\s定义复杂的模式等。

在这种情况下:您将需要进一步更改语法,对类进行双重转义并删除开始/结束正则/表达式指示符号。

想象一下这个正则表达式...

someString.match(/\bcool|tubular\b);
Run Code Online (Sandbox Code Playgroud)

当使用 new 时,与此完全等效的new RegExp()是......

someStringRegex = new RegExp('\\bcool|tubular\\b');
Run Code Online (Sandbox Code Playgroud)

在这个转变过程中发生了两件事:

  • 删除开头和结尾/(否则,您的正则表达式将失败)。
  • 对您的字符类进行双重转义,例如用于单词边框的\b“become” \\b、用于空白的\w“becomes \\w”等(否则,您的正则表达式将失败)。