Javascript 为什么正则表达式要花很长时间来评估某个值?

Javascript 为什么正则表达式要花很长时间来评估某个值?,javascript,regex,regex-negation,regex-lookarounds,Javascript,Regex,Regex Negation,Regex Lookarounds,下面是我的正则表达式: (https?:\/\/)([a-zA-Z]{2,6}\.)*((?!.*[|!{}[\]^"*;]).)+(\.*)([a-zA-Z0-9\.\-\/\:\?&=_%#]+)+([&|?])+$ 它是用否定的前瞻性来验证URL,以允许来自其他语言的字符 这是我在以下位置测试时发生的情况: 为了— -没有对手 -超时表达式的计算时间太长 -匹配 观察结果: 当查询参数的值增加到一定长度以上时,它将超时 但是对于匹配的URL,参数值的长度并不重要 为什么超

下面是我的正则表达式:

(https?:\/\/)([a-zA-Z]{2,6}\.)*((?!.*[|!{}[\]^"*;]).)+(\.*)([a-zA-Z0-9\.\-\/\:\?&=_%#]+)+([&|?])+$
它是用否定的前瞻性来验证URL,以允许来自其他语言的字符

这是我在以下位置测试时发生的情况:

为了—

-没有对手

-超时表达式的计算时间太长

-匹配

观察结果:

当查询参数的值增加到一定长度以上时,它将超时

但是对于匹配的URL,参数值的长度并不重要

为什么超时超过一定长度?我需要修改正则表达式的哪一部分

注意:正则表达式要求URL以
结尾

提前谢谢

编辑:

我需要的是一个正则表达式来验证所有标准(例如www.xyz.com 或someip:port后跟路径参数和/或查询参数, 等)URL。它还应该支持来自其他语言的字符。 通过附加验证强制URL以
结尾?
&


([a-zA-Z0-9\.-\/\:\?&=\%\\\]+
中的
(…+)+
将导致。删除其中一个加号应该会有所帮助。

这是我能想到的最好办法:

\b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\b
JSFIDLE:(我使用了其他人的演示来测试它:)


当然,这并不完整,但它非常接近你们想要和期望的结果

你能解释一下你的正则表达式想要实现什么吗<代码>负面展望要允许来自其他语言的字符
,我看不出您是如何实现的。您的正则表达式的某些部分明显错误。@dhrubajyotigogi感谢您的回答。实际上,它是一个现有的正则表达式,我正在根据需要进行更新
((?!![\[\]^”*;])+
正则表达式的这一部分具有负前瞻性,它允许除[]内的字符外的所有字符。
(?!.[\]^”*)+
这本身就很矛盾。消极前瞻开始时的
*
和紧随其后的
不是一种矛盾吗?你是在说
“你不想前面有任何字符,但仍然想前面有一个字符”
同样是关于你为什么要花很长时间的问题。由于你表情的本质,正则表达式引擎花了很多时间寻找匹配项,最终超时。你的眼睛真的像鹰一样。非常感谢。我也会看看的。谢谢