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]*
      任何有关
      &
  • 非捕获组结束

你能问一个更具体的问题吗?你似乎只是在要求别人解决整个问题。你想知道正则表达式的哪一部分?此外,我建议使用库(如),而不是编写自己的查询参数解析器。通过这种方式,这个问题变得很容易,但是如果你编写自己的正则表达式,正如俗话所说,你现在会有两个问题而不是一个。不幸的是,我们现在还不能引入新的库。。这就是为什么我们必须求助于正则表达式。但是,我想使用一个开源库,而不是重新发明一个轮子:)谢谢NPM链接。。将签出。请尝试
https?:\/\/(?:(?![^&?\s]*&)\s*.[^&\s]*)
。现场演示认为需要重复匹配的零件
&x=y
,否则后续参数将不匹配。因此需要一个
*
而不是最后的