JavaScript正则表达式匹配查询参数,但不匹配HTML实体
我正在尝试获取与以下内容匹配的正则表达式: 正则表达式:JavaScript正则表达式匹配查询参数,但不匹配HTML实体,javascript,regex,Javascript,Regex,我正在尝试获取与以下内容匹配的正则表达式: 正则表达式:/(?:(?:https?):\/\/[-A-Z0-9+@\/%?=~(u124;!:,.;])*(?:&(?!lt]))*)/gi 期望值: https://a.com?a=b&c=d=>应匹配“” https://a.com=>应匹配“” 但是,我的正则表达式不太正常: 实际值: 实际上只匹配: https://a.com?a=b&c=d=>匹配项“” https://a.com=>匹配项“” 你知道如何让正则表达式按照预期匹配吗?这“
/(?:(?:https?):\/\/[-A-Z0-9+@\/%?=~(u124;!:,.;])*(?:&(?!lt]))*)/gi
期望值:
https://a.com?a=b&c=d
=>应匹配“”
https://a.com
=>应匹配“”
但是,我的正则表达式不太正常:
实际值:
实际上只匹配:
https://a.com?a=b&c=d
=>匹配项“”
https://a.com
=>匹配项“”
你知道如何让正则表达式按照预期匹配吗?这“有效”(即针对目标输入),但可能需要对最后一部分进行调整:
(?:https?):\/\/[\w-\.@#\/%?=~|!:,.;]*(?:&(?!lt)[\w=%]*)*
如果您的正则表达式应该验证URL,那么它不应该允许使用管道或分号等。如果这是一个匹配问题,那么应该这样做:
https?:\/\/(?:(?![^&?\s]*&)\S*|[^&\s]*)
这确保了如果前面没有找到?
,则不应存在&
细分:
匹配前面的协议https?:\/\/
非捕获组的开始(?:
如果在(?![^&?\s]*&)
?
匹配任何非空白字符\S*
或|
任何有关[^&\s]*
&
非捕获组结束)
https?:\/\/(?:(?![^&?\s]*&)\s*.[^&\s]*)
。现场演示认为需要重复匹配的零件&x=y
,否则后续参数将不匹配。因此需要一个*
而不是最后的?
。