简体   繁体   中英

Regex Wildcard for Array Search

I have a json array that I currently search through by flipping a boolean flag:

for (var c=0; c<json.archives.length; c++) {
if ((json.archives[c].archive_num.toLowerCase().indexOf(query)>-1)){
inSearch = true;
} }

And I have been trying to create a wildcard regex search by using a special character '*' but I haven't been able to loop through the array with my wildcard.

So what I'm trying to accomplish is when query = '199*', replace the '*' with /[\w]/ and essentially search for 1990,1991,1992,1993,1994 +... + 199a,199b, etc.

All my attempts turn literal and I end up searching '199/[\w]/'.

Any ideas on how to create a regex wildcard to search an array?

Thanks!

You should write something like this:

var query = '199*';
var queryPattern = query.replace(/\*/g, '\\w');
var queryRegex = new RegExp(queryPattern, 'i');

Next, to check each word:

if(json.archives[c].archive_num.match(queryRegex))

Notes:

  • Consider using ? instead of * , * usually stands for many letters, not one.
  • Note that we have to escape the backslash so it will create a valid string literal. The string '\w' is the same as the string w - the escape is ignored in this case.
  • You don't need delimiters ( /.../ ) when creating a RegExp object from a string.
  • [\w] is the same as \w . Yeah, minor one.
  • You can avoid partial matching by using the pattern:

     var queryPattern = '\\b' query.replace(/\*/g, '\\w') + '\\b';

    Or, similarly:

     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)){
    //...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM