我正在尝试使用下面匹配的正则表达式:
正则表达式:/(?:(?:https?):\/\/[-A-Z0-9+@#\/%?=~_|!:,.;]*(?:&(?!lt]))*)/gi
期望:
https://a.com?a=b&c=d
=>应该匹配“https://a.com?a=b&c=d”
https://a.com<
=&gt;应该匹配“https://a.com”
但是,我的正则表达式并不是很有效:
实际:
实际上只是匹配:
https://a.com?a=b&c=d
=&gt;匹配“https://a.com?a=b&”
https://a.com<
=&gt;匹配“https://a.com&”
知道如何让正则表达式按预期进行匹配吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您的正则表达式应该验证URL,那么它不应该允许管道或分号等。如果它是匹配的问题,那么这应该做的工作:
https?:\/\/(?:(?![^&?\s]*&)\S*|[^&\s]*)
如果之前没有找到&
,这可以确保不应该是?
。
故障:
https?:\/\/
匹配://
(?:
开始非捕获组
(?![^&?\s]*&)
如果在&
?
\S*
匹配任何非空白字符|
或[^&\s]*
任何高达&
)
非捕获组结束