阵列搜索的Regex通配符

Regex Wildcard for Array Search

本文关键字:通配符 Regex 搜索 阵列      更新时间:2023-09-26

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