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

时间:2011-08-13 21:49:42

标签: javascript

我有

var string1 = 'asdgghjajakhakhdsadsafdgawerwweadf';
var string2 = 'a';
string1.match("\/"+string2+"\/g").length;

所以有了这个我想找到 a 的外观,但它不起作用,我怎么能把变量怀特?

3 个答案:

答案 0 :(得分:49)

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

var string = 'asdgghjjkhkh';
var string2 = 'a';
var regex = new RegExp( string2, 'g' );
string.match(regex);

如果您不需要全局修饰符,则只需传递string2.match()即可为您创建正则表达式。

string.match( string2 );

答案 1 :(得分:1)

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

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

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

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

someString.match(/\bcool|tubular\b);

当使用新的new RegExp()时,其确切含义是...

someStringRegex = new RegExp('\\bcool|tubular\\b');

在此过渡中发生了两件事:

  • 丢弃/的开头和结尾(否则,您的正则表达式将失败)。
  • 对字符类进行两次转义,例如\b变成\\b表示单词边界,\w变成\\w表示空格,等等(否则,您的正则表达式将失败) 。

答案 2 :(得分:0)

这是另一个例子- //确认字符串的末尾是否包含目标(这都是下面函数中的变量,例如,确认str“ Abstraction”的末尾是否包含目标“ action”)。

function confirmEnding(string, target) {
    let regex = new RegExp(target);
    return regex.test(string);
};