Массив RegEx
Обновление
"Код дает мне ошибку jsbin.com / pecoleweyi / 2 / edit? Js, console "
Несмотря на то, что вопрос не включал маловероятный ввод, такой как: *centos 7*
, добавьте следующую строку, чтобы экранировать специальные символы, которые встречаются при вводе:
var esc = word.replace(/[.*+?^${}()|[\]\\]/gi, '\\$&');
и измените следующую строку:
var sub = esc.replace(/\s/gi, '.');
Демонстрация ниже:
принимает строку (str
) для поиска и массив строк (tgt
) для поиска в строке,
.map()
массив (tgt
), который будет выполнять функцию для каждой строки (word
)
экранировать любые специальные символы:
var esc = word.replace(/[.*+?^${}()|[\]\\]/gi, '\\$&');
заменить любые пробелы (/\s/g
) точкой (.
):
var sub = esc.replace(/\s/g, '.');
затем создает объект RegExp()
, поэтому переменная может быть вставлена в шаблон посредством литеральной интерполяции шаблона (скажем, в десять раз быстрее):
var rgx = new RegExp(`${sub}`, `gim`);
использует .test()
, чтобы получить логическое значение: найдено = true
/ ненайдено = false
var bool = rgx.test(str);
создайте объект для назначения строки поиска: word
в качестве свойства и логического значения: bool
в качестве значения.
var obj = {
[word]: bool
};
возвращает массив объектов:
[{"centos 7":true},{"Ubuntu 18 10":true}]
Демо
var str = `ubuntu-18.10-desktop-amd64.iso.torrent
CentOS-7-x86_64-LiveGNOME-1804.torrent`;
var tgt = [`centos 7`, `Ubuntu 18 10`, `corn flakes`, `gnome`, `Red Hat`, `*centos 7*`];
function rgxArray(str, tgt) {
var res = tgt.map(function(word) {
var esc = word.replace(/[.*+?^${}()|[\]\\]/gi, '\\$&');
var sub = esc.replace(/\s/gi, '.');
var rgx = new RegExp(`${sub}`, `gi`);
var bool = rgx.test(str);
var obj = {
[word]: bool
};
return obj;
});
return res;
}
console.log(JSON.stringify(rgxArray(str, tgt)));