2015-10-05 39 views
0

我想在javascript中使用星号()通配符执行字符串匹配。如果用户输入“v v * k”,则:字符串比较中的Asterik通配符

“vivek”应该匹配。

可以有任意数量的星号。我实现了一个简单的情况,其中星号可以在开始,结束或中间位置。

function matchString(pattern,columnValue) 
{ 
    if(pattern.indexOf('*')>-1){ 
     if (pattern[0] == '*') 
     { 
      return columnValue.endsWith(pattern.substr(1,pattern.length - 1)) ? true:false 
     } 
     else if (pattern[pattern.length - 1] == '*') 
     { 
      return columnValue.startsWith(pattern.substr(0,pattern.length -1)) ? true:false 
     }else{ 
      var stringArray = pattern.split('*') 
      return columnValue.startsWith(stringArray[0]) && columnValue.endsWith(stringArray[stringArray.length-1]) ? true:false 
     } 
    }else{ 
     return (columnValue.indexOf(pattern)>-1) 
    } 
    return false; 
} 

我想使用正则表达式来实现它,以便可以在任何位置使用任意数量的星号。

+3

''vv * k“ - >”vivek“'应该匹配。那是对的吗?还是你的意思是''viv * k“'? –

+2

*“我希望使用Regex来实现它,以便任何位置都可以使用任意数量的星号。”*如果在流程中遇到*特定*问题,请发布有关该问题的问题。这个问题太广泛/模糊。 –

回答

0

如果你的意思是 “V V * K” - > “维韦克”,了解如何: -

function matchString(pattern,columnValue){ 
 
    var regex = new RegExp('^' + pattern.replace(/\*/g, '.{1}') + '$'); 
 
    return regex.test(columnValue); 
 
} 
 

 
alert('pattern = "*oo *a*", value = "foo bar", match = ' + matchString('*oo *a*', 'foo bar'));

编辑

新增^起动和$结尾

+0

谢谢。但是这种方式不行。如果我说n *它匹配在任何位置都有'n'的字符串,但它应该只返回以n开头的那个字符串。 –

+0

我已更新答案 – BenG