【问题标题】:passing variable in regular expression in javascript for string match在javascript中的正则表达式中传递变量以进行字符串匹配
【发布时间】:2026-01-09 07:35:02
【问题描述】:

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

【问题讨论】:

  • @elclanrs:这不起作用:var re = new RegExp("/^.*"+ str2 + ".*/"); if(str1.match(re){ //做点什么}

标签: javascript regex string match


【解决方案1】:

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

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

【讨论】:

  • 非常感谢!我只是把事情复杂化了!
  • 技术上对于给定的 sql 查询应该是 str.indexOf(str2)>-1~str.indexOf(str2)。如果% 之间的术语位于字符串值的开头/结尾,Afaik LIKE 也会返回一些内容。
  • @Jeff: if(str1.contains(str2) 是我所需要的。谢谢 Jeff。那已被删除,所以我无法将其标记为答案
  • @user930514 请注意,Javascript 中没有“String.contains”方法,尽管我更新了原始答案以反映这一点并提及包含。
  • @Jeff:好的!感谢您的信息
【解决方案2】:

首先,使用RegExp.test 可能比较合适。其次,创建一个RegExp 对象,你不应该使用RegExp 文字字符('/')。

所以你的代码变成了:

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

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

第三,RegExp (/^pqr.*/) 将测试false 是否为str1WHERE "str1" LIKE '%str2%'; 的等价物与RegExp(str2,'i').test(str1) 一样简单(注意i 修饰符(不区分大小写的测试)),甚至只是~str.indexOf(str2)(请参阅@Jeff Bowmans 答案)。

【讨论】:

    【解决方案3】:

    这是一个快速的 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() 函数进行这些简单的检查

    【讨论】:

      最近更新 更多