Regex Wildcard для поиска в массиве - PullRequest
1 голос
/ 13 июня 2011

У меня есть массив 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] /'.

Любые идеи о том, как создать подстановочный знак регулярного выраженияискать массив?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 13 июня 2011

Вы должны написать что-то вроде этого:

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 - в этом случае escape игнорируется.
  • Вам не нужны разделители (/.../) при создании RegExp объект из строки.
  • [\w] совпадает с \w.Да, второстепенный.
  • Вы можете избежать частичного сопоставления, используя шаблон:

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

    Или, аналогично:

    var queryPattern = '^' query.replace(/\*/g, '\\w') + '$';
    
1 голос
/ 13 июня 2011
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)){
    //...
}
...