【问题标题】:Asterik wildcard in string comparision [duplicate]字符串比较中的星号通配符[重复]
【发布时间】:2015-10-05 12:50:20
【问题描述】:

我想在 javascript 中使用星号() 通配符执行字符串匹配。如果用户输入 "vv*k" 那么:

“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;
}

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

【问题讨论】:

  • "vv*k" -> "vivek" 应该匹配。那是对的吗?还是你的意思是"viv*k"
  • “我想用 Regex 来实现它,这样任何位置都可以使用任意数量的星号。” 如果你遇到一个特定的过程中的问题,发布一个关于这个的问题。这个问题太宽泛/太模糊了。

标签: javascript jquery regex


【解决方案1】:

如果你的意思是“viv*k”->“vivek”,怎么样:-

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'));

编辑

添加 ^ 开始,$ 结束

【讨论】:

  • 谢谢。但它不是那样工作的。如果我说 n* 它匹配在任何位置具有 'n' 的字符串,但它应该只返回以 n 开头的字符串。
  • 我已经更新了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多