假设我需要在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}
答案 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。