JavaScript正则表达式匹配查询参数但不匹配HTML实体

时间:2018-05-09 17:43:56

标签: javascript regex

我正在尝试使用下面匹配的正则表达式:

正则表达式:/(?:(?:https?):\/\/[-A-Z0-9+@#\/%?=~_|!:,.;]*(?:&(?!lt]))*)/gi

期望

https://a.com?a=b&c=d =>应该匹配“https://a.com?a=b&c=d

https://a.com< =>应该匹配“https://a.com

但是,我的正则表达式并不是很有效:

实际

实际上只是匹配:

https://a.com?a=b&c=d =>匹配“https://a.com?a=b&

https://a.com< =>匹配“https://a.com&

知道如何让正则表达式按预期进行匹配吗?

2 个答案:

答案 0 :(得分:0)

这“有效”(即用于你的目标输入)但可能需要调整最后一部分:

(?:https?):\/\/[\w-\.@#\/%?=~|!:,.;]*(?:&(?!lt)[\w=%]*)*

demo

答案 1 :(得分:0)

如果您的正则表达式应该验证URL,那么它不应该允许管道或分号等。如果它是匹配的问题,那么这应该做的工作:

https?:\/\/(?:(?![^&?\s]*&)\S*|[^&\s]*)

Live demo

如果之前没有找到&,这可以确保不应该是?

故障:

  • https?:\/\/匹配://
  • 之前的协议
  • (?:开始非捕获组
    • (?![^&?\s]*&)如果在&
    • 之后没有发生?
    • \S*匹配任何非空白字符
    • |
    • [^&\s]*任何高达&
    • 的内容
  • )非捕获组结束