2017-05-04 156 views
1

我有一个DNS日志,这些日志来是这样的:正则表达式DNS日志

17/04/2017 08:59:38 09DC PACKET 000000A939E64600 UDP Rcv 10.254.30.96 c650 Q [0001 D NOERROR] A  (8)master11(10)teamviewer(3)com(0) 
17/04/2017 08:59:38 09DC PACKET 000000A9404FABE0 UDP Rcv 10.254.30.87 9bae Q [0001 D NOERROR] A  (7)master2(10)teamviewer(3)com(0) 
17/04/2017 08:59:42 09E0 PACKET 000000A9404D15B0 UDP Rcv 10.254.35.43 fdcc Q [0001 D NOERROR] A  (6)mobile(4)pipe(4)aria(9)microsoft(3)com(0) 
17/04/2017 09:49:45 09E8 PACKET 000000A94194FE80 UDP Rcv 8.8.8.8   646d R Q [8381 DR NXDOMAIN] A  (3)mta(3)dkf(2)com(0) 

在每一行结束时,你将看到这样表示的域名:

(7)master2(10)teamviewer(3)com(0) 

我想只能得到以下部分:

master teamviewer com 

并用“。”替换空格。有这样的结果:

master2.teamviewer.com 

要做到这一点我用这个正则表达式:

(?<=\)).*?(?=\() 

但不幸的是我得到这个错误:

Lookbehind is not supported in javascript 

做任何一件有建议或这个问题的解决方案? 感谢

+0

不知道你在做什么。尝试用's.replace替换(/ \([^ \ s()] + \)(?= \ S * $)/ g,'。')'。 –

+0

我使用的正则表达式在Regex网站构建器中为我工作,但它在名为QRADAR的平台上无效。 我相信这种类型的Lookbehind在QRADAR中不受支持。 –

+0

是否以特定方式捕获工作?在{}([^()] +)\('(在QRADAR中,不在正则表达式构建网站) –

回答

0

您可以使用该解决方案从this article

A\s+\(\d+\)(.*?)\(\d+\)(.*?)\(\d+\)(.*?)\(\d+\) 

regex demo

这里,

  • A - 字面A
  • \s+ - 1+空格
  • \(\d+\) - 附带()
  • (.*?) 1+数字 - 任何0+字符,与possi一样少ble(如*?是一个惰性量词)
  • \(\d+\)(.*?)\(\d+\)(.*?)\(\d+\) - 上述两个子模式的交替序列。

根据需要设置捕获组选项。在上面的例子中,

Format String : $1.$2.$3 
0

你可以试试这个:

\(\d+\)(?:[\w]+\(\d+\))+ 

Regex Demo

const regex = /\(\d+\)(?:[\w]+\(\d+\))+/g; 
 
const str = `17/04/2017 08:59:38 09DC PACKET 000000A939E64600 UDP Rcv 10.254.30.96 c650 Q [0001 D NOERROR] A  (8)master11(10)teamviewer(3)com(0) 
 
17/04/2017 08:59:38 09DC PACKET 000000A9404FABE0 UDP Rcv 10.254.30.87 9bae Q [0001 D NOERROR] A  (7)master2(10)teamviewer(3)com(0) 
 
17/04/2017 08:59:42 09E0 PACKET 000000A9404D15B0 UDP Rcv 10.254.35.43 fdcc Q [0001 D NOERROR] A  (6)mobile(4)pipe(4)aria(9)microsoft(3)com(0) 
 
17/04/2017 09:49:45 09E8 PACKET 000000A94194FE80 UDP Rcv 8.8.8.8   646d R Q [8381 DR NXDOMAIN] A  (3)mta(3)dkf(2)com(0) 
 
`; 
 
let m; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
console.log(m[0].split(/\(\d+\)/).filter(val => val).join(".")); 
 
}

+0

OP不使用JavaScript,而是使用QRADAR中的JS正则表达式* flavor *。 –