Причина, по которой ваш Regex работает в одном месте, но не в другом, может быть связана с различными вкусами / движками Regex, используемыми в regexr.com и Splunk.
Следующее Regex должно работать дляВаш вариант использования:
^[^=]*=([^=]*)(?=\s)
Однако имя пользователя не должно содержать знак равенства, чтобы Regex работал. Это может быть достигнуто путем очистки пользовательского ввода от буквенно-цифровых символов плюс специальных символов, которые вы указали (".", "\", Пробелы) и т. Д.
const logEntries = `Oct 3 23:33:00 2019 wc1 authmgr[4111]: <522008> <4904> <NOTI> <wc1 123.134.128.122> User Authentication Successful: username=lastname, firstname MAC=d0:c6:25:79:e7:c6 IP=192.168.16.26 role=Authenticated VLAN=600 AP=43:4a:e3:c9:ec:0c SSID=corpnet AAA profile=aaaprof auth method=802.1x auth server=authserv
Oct 3 22:42:27 2019 wc1 authmgr[4111]: <522008> <4111> <NOTI> <wc1 123.134.128.122> User Authentication Successful: username=lastname, firstname initial MAC=b2:09:cf:4c:80:1e IP=192.168.16.27 role=Authenticated VLAN=600 AP=34:fc:b2:c1:be:dc SSID=corpnet AAA profile=aaaprof auth method=802.1x auth server=authserv`;
let result;
logEntries.split(/\n/).map((entry) => {
result = entry.match(/^[^=]*=([^=]*)(?=\s)/);
if (result) {
console.log(result[1]);
}
});
В приведенном выше примере обратите внимание, что сначала я разбил журнал на отдельные записи, а затем провел сопоставление регулярных выражений по отдельности для каждой.
ОбъяснениеРегулярное выражение:
^
- устанавливает позицию в начале строки
[^=]
- соответствует всему, что не является буквальным знаком равенства (=)
*
- соответствует нулю и неограниченному числу раз
=
- соответствует литеральному знаку равенства
([^=]*)
- группа захвата, которая соответствует чему-либо, что не является литеральным знаком равенства
(?=\s)
- положительный прогноз, утверждающий, что то, что сразу следует за текущей позицией встрока является пробелом