我正在尝试测试大型正则表达式,我担心性能。
[具体地说,我使用crawler-user-agents来区别对待机器人。用performance.now()
进行检查,大约需要1毫秒才能检查整个阵列。还不错,但是我不想将此时间添加到我的网站中。
const bots = require('crawler-user-agents');
const patterns = bots.map(x => RegExp(x.pattern))
function middleware(req, res, next){
const { headers = {} } = req;
const userAgent = headers['user-agent'];
if(userAgent && patterns.some(x => x.test(userAgent)){
return next();
}
//regular code
//...
}
所以,我想要某种方法将这些正则表达式合并为一个较小的数组或单个组合的正则表达式。我在Java中找到了这个库:https://github.com/fulmicoton/multiregexp
js是否有等效项?
否,EcmaScript RegExp
实例中目前没有这样的功能。
某些库提供附加功能,例如XRegExp。这个有XRegExp.union
。但是,该功能似乎并没有真正优化单个正则表达式的合并,因此XRegExp.union
和abcde
将合并为abcdE
,而abcde|abcdE
本来是效率更高的统一正则表达式。不过,这种“简单”的结合仍然可以提高性能。
请注意,您链接到的Java库abcd[eE]
不支持组。如果确实不需要此支持,则可以使用以下代码行实现简单合并:
multirexp
同样,这不会进一步优化所得的正则表达式。