我需要接受用户的正则表达式 - 疯了,我知道。 Google RE2正则表达式解析器比基于PCRE的解析器更安全,因为它不使用回溯,因此可以防止灾难性的回溯,无限循环和一般混乱。据称通常会更快。在我只测试系统日志行的测试用例中,它超过 300%慢。有什么想法吗?
我在Ubuntu上使用Node v7.7.3。
有问题的代码:
const SYSLOG_LINE_REGEX = new RegExp([
/(<[0-9]+>)?/, // 1 - optional priority
/([a-z]{3})\s+/, // 2 - month
/([0-9]{1,2})\s+/, // 3 - date
/([0-9]{2}):/, // 4 - hours
/([0-9]{2}):/, // 5 - minutes
/([0-9]{2})/, // 6 - seconds
/(\s+[\w.-]+)?\s+/, // 7 - host
/([\w\-().0-9/]+)/, // 8 - process
/(?:\[([a-z0-9-.]+)\])?:/, // 9 - optional pid
/(.+)/ // 10 message
].map(regex => regex.source).join(''), 'i');
const parts = SYSLOG_LINE_REGEX.exec(log.trim());
更新: