[英]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.