问题描述
|
我有一个json数组,目前正在通过翻转布尔值标志进行搜索:
for (var c=0; c<json.archives.length; c++) {
if ((json.archives[c].archive_num.toLowerCase().indexOf(query)>-1)){
inSearch = true;
} }
而且我一直在尝试使用特殊字符\'* \'创建通配符正则表达式搜索,但是我无法使用通配符遍历数组。
所以我要完成的工作是当query = \'199 * \'时,用/ [\\ w] /代替\'* \'并本质上搜索1990,1991,1992,1993,1994 +。 .. + 199a,199b等
我所有的尝试都变成了文字,最终我搜索了\'199 / [\\ w] / \'。
关于如何创建正则表达式通配符以搜索数组的任何想法?
谢谢!
解决方法
您应该这样写:
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对象时,不需要定界符(/.../
)。
[\\w]
和\\w
相同。是的,未成年人
您可以使用以下模式避免部分匹配:
var queryPattern = \'\\\\b\' query.replace(/\\*/g,\'\\\\w\') + \'\\\\b\';
或者,类似地:
var queryPattern = \'^\' query.replace(/\\*/g,\'\\\\w\') + \'$\';
, 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)){
//...
}