【问题标题】:Regex Wildcard for Array Search用于数组搜索的正则表达式通配符
【发布时间】:2011-09-14 01:32:42
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 你能显示你做这个替换的代码吗?还有你要改什么?我假设 archive_num 是完整的字符串。
  • 将所有内容变成文字的尝试是这样的:query = query.replace('*', /[\w]/);
  • 在JS中你不应该使用引号'*'但是/*/作为搜索字符串并且替换字符串应该被引用

标签: javascript regex arrays search wildcard


【解决方案1】:

你应该这样写:

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') + '$';
    

【讨论】:

  • 完美!谢谢,这正是我想要弄清楚的。也感谢您的提示,他们将来一定会帮助我!
【解决方案2】:
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)){
    //...
}

【讨论】:

    猜你喜欢
    • 2019-07-29
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多