2015-10-05 38 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