用于数组搜索的正则表达式通配符

| 我有一个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)){
    //...
}
    

要回复问题请先登录注册