Обработка правил брандмауэра Windows с помощью javascript и regex
Пытаюсь структурировать результат консольной команды netsh advfirewall firewall show rule dir=in name=all profile=private с помощью js
Примерно вот так оно выглядит:
Имя правила: VMware Authd Service (private)
----------------------------------------------------------------------
Включен: Да
Направление: Вход
Profiles: Частный
Группировка:
LocalIP: Любой
Удаленный IP-адрес: LocalSubnet
Протокол: Любой
Обход узлов: Да
Действие: Разрешить
Имя правила: Сервер потоковой передачи на устройство (потоковая передача, RTSP - входящий)
----------------------------------------------------------------------
Включен: Да
Направление: Вход
Profiles: Частный
Группировка: Функция "Передать на устройство"
LocalIP: Любой
Удаленный IP-адрес: LocalSubnet
Протокол: TCP
Локальный порт: 23554,23555,23556
Удаленный порт: Любой
Обход узлов: Нет
Действие: Разрешить
Хотел разделить их регулярным выражением и потом split'ом
Однако, написать такую регулярку не получилось
Примерно так должно выглядеть на выходе:
Совпадение 1:
Имя правила: VMware Authd Service (private)
----------------------------------------------------------------------
Включен: Да
Направление: Вход
Profiles: Частный
Группировка:
LocalIP: Любой
Удаленный IP-адрес: LocalSubnet
Протокол: Любой
Обход узлов: Да
Действие: Разрешить
Совпадение 2:
Имя правила: Сервер потоковой передачи на устройство (потоковая передача, RTSP - входящий)
----------------------------------------------------------------------
Включен: Да
Направление: Вход
Profiles: Частный
Группировка: Функция "Передать на устройство"
LocalIP: Любой
Удаленный IP-адрес: LocalSubnet
Протокол: TCP
Локальный порт: 23554,23555,23556
Удаленный порт: Любой
Обход узлов: Нет
Действие: Разрешить
В общем, нужна помощь с регуляркой для этой задачки
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Алгоритм:
- Разделение текста на строки. Тут удобно использовать
splitс регулярным выражением\r?\n(строки заканчиваются на\r\nили на\n) - Перебор строк. Можно циклом, можно функцией
- Проверка наличия строки с
"Имя правила:" - Эту строку и следующие добавляйте в под массив
rule
В результате получите массив из массивов
Пример:
let text = `\
Имя правила: VMware Authd Service (private)
----------------------------------------------------------------------
Включен: Да
Направление: Вход
Profiles: Частный
Группировка:
LocalIP: Любой
Удаленный IP-адрес: LocalSubnet
Протокол: Любой
Обход узлов: Да
Действие: Разрешить
Имя правила: Сервер потоковой передачи на устройство (потоковая передача, RTSP - входящий)
----------------------------------------------------------------------
Включен: Да
Направление: Вход
Profiles: Частный
Группировка: Функция "Передать на устройство"
LocalIP: Любой
Удаленный IP-адрес: LocalSubnet
Протокол: TCP
Локальный порт: 23554,23555,23556
Удаленный порт: Любой
Обход узлов: Нет
Действие: Разрешить
`;
let lines = text.split(/\r?\n/);
let rules = [];
let rule = null;
for (let line of lines) {
if (line.includes('Имя правила:')) {
rule = [];
rules.push(rule);
}
if (rule != null) {
rule.push(line);
}
}
console.log(rules);