我有一个json数组,我目前通过翻转布尔标志来搜索:
for (var c=0; c<json.archives.length; c++) {
if ((json.archives[c].archive_num.toLowerCase().indexOf(query)>-1)){
inSearch = true;
} }
我一直在尝试使用特殊字符'*'创建通配符正则表达式搜索,但我无法使用通配符遍历数组。
所以我想要完成的是查询='199 *'时,用/ [\ w] /替换'*'并基本上搜索1990,1991,1992,1993,1994 + ... + 199a,199b等
我的所有尝试都是字面意思,我最终搜索'199 / [\ w] /'。
有关如何创建正则表达式通配符以搜索数组的任何想法吗?
谢谢!
答案 0 :(得分:6)
你应该写这样的东西:
var query = '199*';
var queryPattern = query.replace(/\*/g, '\\w');
var queryRegex = new RegExp(queryPattern, 'i');
接下来,检查每个单词:
if(json.archives[c].archive_num.match(queryRegex))
注意:
?
代替*
,*
通常代表许多字母,而不是一个。'\w'
与字符串w
相同 - 在这种情况下会忽略转义。/.../
)。[\w]
与\w
相同。是的,未成年人。您可以使用模式避免部分匹配:
var queryPattern = '\\b' query.replace(/\*/g, '\\w') + '\\b';
或者,类似地:
var queryPattern = '^' query.replace(/\*/g, '\\w') + '$';
答案 1 :(得分:1)
var qre = query.replace(/[^\w\s]/g, "\\$&") // escape special chars so they dont mess up the regex
.replace("\\*", "\\w"); // replace the now escaped * with '\w'
qre = new RegExp(qre, "i"); // create a regex object from the built string
if(json.archives[c].archive_num.match(qre)){
//...
}