Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的多正则表达式_Javascript_Regex_Bulk - Fatal编程技术网

javascript中的多正则表达式

javascript中的多正则表达式,javascript,regex,bulk,Javascript,Regex,Bulk,我正在尝试测试一大组正则表达式,我担心性能 具体来说,我用不同的方式对待机器人。使用performance.now()检查整个阵列大约需要1毫秒。还不错,但这次我不想把它添加到我的网站上 const bots=require('crawler-user-agents'); constpatterns=bots.map(x=>RegExp(x.pattern)) 功能中间件(req、res、next){ const{headers={}}=req; const userAgent=headers[

我正在尝试测试一大组正则表达式,我担心性能

具体来说,我用不同的方式对待机器人。使用
performance.now()
检查整个阵列大约需要1毫秒。还不错,但这次我不想把它添加到我的网站上

const bots=require('crawler-user-agents');
constpatterns=bots.map(x=>RegExp(x.pattern))
功能中间件(req、res、next){
const{headers={}}=req;
const userAgent=headers['user-agent'];
if(userAgent&&patterns.some(x=>x.test(userAgent)){
返回next();
}
//常规代码
//...
}
所以,我想用某种方法将这些正则表达式合并到一个更小的数组中,或者合并成一个正则表达式。
我在Java中找到了这个库:

1) js是否有一个等价物?

2) 即使静态联合也可以工作,是否有一种服务可以将我的模式预压缩到一个较小的集合中?

不,EcmaScript
RegExp
实例中目前没有这种功能

有些库提供了附加功能,如。这个有。然而,该函数似乎并没有真正优化单个正则表达式的合并,因此
abcde
abcde
将合并为
abcde | abcde
,而
abcd[eE]
将是一个更有效的统一正则表达式。不过,这种“简单”的结合仍可能带来绩效提升

请注意,您链接到的Java库不支持组。如果确实不需要支持,则可以使用以下代码行实现简单的合并:

const unifiedPattern = RegExp(bots.map(x => `(?:${x.pattern})`).join("|"));

同样,这不会进一步优化生成的正则表达式。

不,EcmaScript
RegExp
实例中目前没有此类功能

有些库提供了附加功能,如。这个有。然而,该函数似乎并没有真正优化单个正则表达式的合并,因此
abcde
abcde
将合并为
abcde | abcde
,而
abcd[eE]
将是一个更有效的统一正则表达式。不过,这种“简单”的结合仍可能带来绩效提升

请注意,您链接到的Java库不支持组。如果确实不需要支持,则可以使用以下代码行实现简单的合并:

const unifiedPattern = RegExp(bots.map(x => `(?:${x.pattern})`).join("|"));

同样,这不会进一步优化生成的正则表达式。

请发布添加的MCVE。谢谢:)请注意,由于堆栈溢出,请求库或服务是离题的。请发布添加的MCVE。谢谢:)请注意,请求库或服务与堆栈溢出无关。我尝试使用
.map(pattern=>`(${pattern})`.join('|')
手动分组。改善是微不足道的我可以想象。理论上的时间复杂性并没有随着这样的结合而提高。为了真正获得优势,必须将正则表达式解析在一起,以便生成高效的新正则表达式。在JavaScript中这样做本身可能是一项代价高昂的操作(除了非常繁琐之外)。我们希望有一天EcmaScript将扩展这样一个功能。我尝试使用
.map(pattern=>`(${pattern})`.join('|')
手动分组。改善是微不足道的我可以想象。理论上的时间复杂性并没有随着这样的结合而提高。为了真正获得优势,必须将正则表达式解析在一起,以便生成高效的新正则表达式。在JavaScript中这样做本身可能是一项代价高昂的操作(除了非常繁琐之外)。我们希望有一天EcmaScript能够扩展这样一个特性。