在javascript的正则表达式中传递变量以进行字符串匹配
假设我需要在javascript中使用字符串匹配来获得与LIKE运算符等效的结果在javascript的正则表达式中传递变量以进行字符串匹配,javascript,regex,string,match,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 + ".*/"
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}
如果您需要确认一个字符串出现在不同字符串的中间,请使用<代码> STR1.NoXOF(STR2)>=0 < /代码>。在其他语言中,这相当于str1.contains(str2),尽管Javascript字符串缺少contains方法
如果您确实想将STR2放在正则表达式的中间,请务必。
首先,使用<代码> ReGEXP.Test< /Cord>可能是适当的。其次,创建一个
RegExp
对象,您不应该使用RegExp
文字字符('/')
因此,您的代码变成:
var str1 = 'abcd/pqrst'
,str2 = 'pqr'
,re = RegExp('^'+str2+'.*');
if (re.test(str1)) { /* do things */}
第三,
RegExp
(/^pqr.*/
)将对str1
测试false
。的等价物,其中“str1”类似于“%str2%”
与RegExp(str2,'i').test(str1)
(注意i
修饰符(不区分大小写的测试)),甚至只是~str.indexOf(str2)
(请参见@answer)。这里有一个快速的jsFiddle供您尝试
这里有更多细节
您还可以使用contains()/indexOf()函数进行这些简单检查@elclanrs:这不起作用:var re=new RegExp(“/^.*”+str2+“*/”);if(str1.match(re){//do something}非常感谢!我只是把事情弄复杂了!从技术上讲,对于给定的sql查询,它应该是
str.indexOf(str2)>-1
,或者~str.indexOf(str2)
。如果%
之间的术语在字符串值的开头/结尾,Afaik也会返回一些东西。@Jeff:if(str1.contains(str2)是我所需要的全部。谢谢Jeff。它已被删除,因此我无法将其标记为answer@user930514请注意,Javascript中没有“String.contains”方法,尽管我更新了原始答案以反映这一点,并且还是提到了contains。@杰夫:好的!谢谢您提供的信息
var re = new RegExp("^.*"+str2+".*","gi");
// second param take flags