阵列搜索的正则表达式通配符

时间:2011-06-13 16:24:28

标签: javascript regex arrays search wildcard

我有一个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] /'。

有关如何创建正则表达式通配符以搜索数组的任何想法吗?

谢谢!

2 个答案:

答案 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相同 - 在这种情况下会忽略转义。
  • 从字符串创建RegExp对象时,您不需要分隔符(/.../)。
  • [\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)){
    //...
}