繁体   English   中英

使用正则表达式来模拟通配符(全局)

[英]Using regexes to emulate wild cards (globs)

我是JavaScript正则表达式的新手,我正在尝试根据输入文本字段创建通配符搜索,用户可以在其中使用星号( * )输入条件。

例如:用户可以搜索*man (或) man* (或) man (或) *man* ,所以我期望得到这样的结果,

1) man* =应该仅返回以man(manager)开头的单词,但应忽略“性能”,

2) *man =应该只返回以man(human)结尾的单词。 它不应返回“经理”和“表现”,

3) *man* =这应该返回字符串中任何地方存在的单词。

以下函数部分起作用,但在搜索man*时不会查找单词的开头(即,它也会返回“性能”)

function wildCardSearch(grdText, query) {
  var queryPattern = query.replace(/\*/g, '\\w');
  var queryRegex = new RegExp(queryPattern, 'i');        
  if (grdText.match(queryRegex))
    return true;
}

有什么帮助吗?

您可以锚定它: wildCardSearch("mance","^man*") 在开头加^表示它必须以指定的字符串开头,在末尾加$则必须以指定的字符串结尾。 您可以修改函数以进行检查,如果字符串开头没有*,则可以添加^锚。

function wildCardSearch(grdText, query) {
    if(query[0]!='*')
        query = "\\b"+query;
    var queryPattern = query.replace(/\*/g, '\\w');
    var queryRegex = new RegExp(queryPattern, 'i');        
    if (grdText.match(queryRegex))
        return true;
    return false;
}

这是工作示例: http : //jsfiddle.net/NxstY/

function wildCardSearch(grdText, query) {
  if(query.indexOf('*') != -1)
    var queryPattern = query.replace(/\*/g, '.*');
  else
    var queryPattern = '.*' + query + '.*';
  var queryRegex = new RegExp('^' + queryPattern + '$', 'i');        
  if (grdText.match(queryRegex))
    return true;
}

我将执行以下操作:

function wildCardSearch(grdText, query) {
    var queryPattern = query
        .replace(/^([^*])|([^*])$/g, '$2\\b$1')
        .replace(/\*/g, '');
    var queryRegex = new RegExp(queryPattern, 'i');
    return queryRegex.test(grdText);
}

每次搜索的结果:

wildCardSearch('performance', 'man')   // /\bman\b/i -> false
wildCardSearch('performance', 'man*')  // /\bman/i   -> false
wildCardSearch('performance', '*man')  // /man\b/i   -> false
wildCardSearch('performance', '*man*') // /man/i     -> true

将上面的代码粘贴到浏览器控制台中进行检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM