Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript的正则表达式中传递变量以进行字符串匹配_Javascript_Regex_String_Match - Fatal编程技术网

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

在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 + ".*/"

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

如果您需要确认一个字符串出现在不同字符串的中间,请使用<代码> 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