我有一个json数组,我当前通过翻转布尔标志来搜索:
for (var c=0; c<json.archives.length; c++) {
if ((json.archives[c].archive_num.toLowerCase().indexOf(query)>-1)){
inSearch = true;
} }
我一直试图通过使用特殊字符"*"来创建通配符regex搜索,但我无法使用通配符在数组中循环。
因此,我试图实现的是,当query='199*'时,将'*'替换为/[\w]/,并基本上搜索19901991199219931994+…+199a、199b等
我所有的尝试都变成了文字,我最终搜索到了"199/[\w]/"。
关于如何创建regex通配符来搜索数组,有什么想法吗?
谢谢!
你应该写这样的东西:
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
相同——在这种情况下会忽略转义 - 从字符串创建RegExp对象时,不需要分隔符(
/.../
) - CCD_ 7与CCD_。是的,小的
您可以使用以下模式来避免部分匹配:
var queryPattern = '\b' query.replace(/*/g, '\w') + '\b';
或者,类似地:
var queryPattern = '^' query.replace(/*/g, '\w') + '$';
var qre = query.replace(/[^ws]/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)){
//...
}