使用match(),但它没有#c;来自字符串变量

时间:2014-07-10 08:46:39

标签: javascript jquery

我有以下小提琴:

jsfiddle

功能:

$('#testbutton').on("click", function(){
    test();
});

function test()
{
    var data = [];
    data['article'] = "monablanko";
    data['specialarticle'] = ["blanko", "bbsooel"];

    var tmp = data['specialarticle'].join("|");
    if( data['article'].match( /(tmp)/ ) )
    {
        $('#result').html("I found a match");
    }
    else
    {
        $('#result').html("I didn't found a match");
    }
}

我没有找到与此功能匹配的内容。我的错误在哪里?当我使用

时,tmp的类型是字符串

console.log(typeof tmp);

当我写

if( data['article'].match( /(blanko|bbsooel)/ ) )

然后我找到一个匹配。

2 个答案:

答案 0 :(得分:5)

您与字符串文字"tmp"匹配,而不是与变量tmp中包含的值匹配。试试这样:

 data['article'].match( new RegExp("(" + tmp + ")") )

例如:http://jsfiddle.net/4K8Km/

答案 1 :(得分:1)

您需要创建一个RegExp以匹配您的字符串:

$('#testbutton').on("click", function(){
  test();
});

function test(){
  var data = [];
  data['article'] = "monablanko";
  data['specialarticle'] = ["blanko", "bbsooel"];

  var tmp = new RegExp('('+data['specialarticle'].join("|")+')');
  if( data['article'].match( tmp ) )
  {
    $('#result').html("I found a match");
  }
  else
  {
    $('#result').html("I didn't found a match");
  }
}

还有一个提示:如果您不需要收集匹配项,但只是为了测试字符串是否包含RegExp我建议使用test代替match:< / p>

tmp.test(data['article']);

而不是

data['article'].match(tmp);