【发布时间】:2014-08-13 08:34:09
【问题描述】:
下面是我的正则表达式:
(https?:\/\/)([a-zA-Z]{2,6}\.)*((?!.*[|!{}[\]^"*;]).)+(\.*)([a-zA-Z0-9\.\-\/\:\?&=_%#]+)+([&|?])+$
它是验证一个带有否定前瞻的 URL 以允许来自其他语言的字符。
这就是我在http://regex101.com/#javascript 测试它时发生的情况:
为了——
http://server.com/path?id=1111111 - 不匹配
http://server.com/path?id=11111111 - TIMEOUT 您的表达式计算时间过长。
观察:
当查询参数的值增加到超过一定长度时,它会超时。
但是对于匹配的 URL,参数值的长度并不重要。
为什么超时超过一定长度?我需要修改正则表达式的哪一部分?
注意:RegEx 要求 URL 以 ? 或 & 结尾
提前致谢。
编辑:
我需要的是一个验证所有标准的正则表达式(例如 www.xyz.com 或 someip:port 后跟路径参数和/或查询参数, 等)网址。它也应该支持其他语言的字符。 通过额外的验证来强制 URL 以
?或&.
【问题讨论】:
-
你能解释一下你的正则表达式试图实现什么吗?
negative look-ahead to allow characters from other languages,我不明白你是如何实现它的。您的正则表达式的某些部分明显错误。 -
@DhrubajyotiGogoi 感谢您的回复。实际上,这是我正在根据需要更新的现有 RegEx。
((?!.*[|!{}[\]^"*;]).)+这部分正则表达式带有负前瞻,允许除 [] 内的所有字符。 -
((?!.*[|!{}[\]^"*;]).)+这本身就很矛盾。负前瞻开头的.*和前瞻后的.不是矛盾吗? -
你的意思是
"you do not want any character ahead and still want a character ahead" -
另外关于你为什么需要很长时间的问题。由于表达式的性质,正则表达式引擎花费大量时间来查找匹配项,最终超时。
标签: javascript regex regex-negation regex-lookarounds