在javascript中以正则表达式传递变量以进行字符串匹配

时间:2012-10-15 05:37:19

标签: javascript regex string match

假设我需要在javascript中使用字符串匹配来获得与LIKE运算符等效的结果。

WHERE "str1" LIKE '%str2%';

以下匹配表达式有效。

var str1="abcd/pqrst"; 
var str2 =  "pqr";

if(str1.match(/^.*pqr.*/)){ //do something};

但是我需要传递一个变量而不是pqr,类似于下面的语句。请帮助。

//Wrong
var re = new RegExp("/^.*"+ str2 + ".*/"); 
if(str1.match(re){ //do something}

3 个答案:

答案 0 :(得分:6)

这是一个快速的jsFiddle供您尝试

http://jsfiddle.net/jaschahal/kStTc/

var re = new RegExp("^.*"+str2+".*","gi"); 
// second param take flags

此处有更多详情

http://www.w3schools.com/jsref/jsref_obj_regexp.asp

您还可以使用contains()/ indexOf()函数进行这些简单检查

答案 1 :(得分:4)

首先,使用RegExp.test可能是合适的。其次,创建RegExp对象时,不应使用RegExp个字符('/')。

所以你的代码变成了:

var str1 = 'abcd/pqrst'
   ,str2 = 'pqr'
   ,re = RegExp('^'+str2+'.*');

if (re.test(str1)) { /* do things */}

第三,RegExp/^pqr.*/)会为false测试str1。相当于WHERE "str1" LIKE '%str2%';就像RegExp(str2,'i').test(str1)一样简单(注意i修饰符(不区分大小写的测试)),甚至只是~str.indexOf(str2)(请参阅@ Jeff Bowmans回答)。

答案 2 :(得分:2)

如果您只需要确认字符串出现在不同字符串的中间,请使用str1.indexOf(str2) >= 0。在其他语言中,这相当于str1.contains(str2),但Javascript字符串缺少包含方法。

如果您确实想将str2放在正则表达式的中间,请务必escape it