2

假设我需要在 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}
4

3 回答 3

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() 函数进行这些简单检查

于 2012-10-15T05:48:36.073 回答
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的回答)。

于 2012-10-15T05:44:42.783 回答
2

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

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

于 2012-10-15T05:43:51.377 回答