使用正则表达式解析URL(可选的跟踪代码和哈希)

时间:2017-06-14 20:59:08

标签: regex url

我有很多我想要考虑的场景,但似乎无法确定我的匹配字符串(#regexbeginner)。不幸的是,没有JavaScript是可能的,因为这个正则表达式正在Adobe Analytics的分类规则构建器中使用。

我所追求的是三组:

  1. 基本网址(不包括http[s]:\/\/www.
  2. 跟踪代码(在?之后,但在#之前的所有内容)
  3. 哈希(#之后的所有内容)
  4. 问题是,跟踪代码和哈希值可选。两者都可能出现,其中一个可能出现,或者都不会出现。 URL中也不会有更多的跟踪代码或多个哈希,并且哈希将永远不会出现在跟踪代码之前。

    这是我到目前为止所处的地方: ^http[s]:\/\/www.(.+\/.+)\?(.+)?#(.+)? 如果同时存在跟踪代码和散列,则此方法可以正常工作,但如果存在跟踪代码和散列,则无法正常工作。

    以下是我的测试用例。所有人都需要返回三组,但我知道第2组和/或第3组可能是空的。

    任何帮助将不胜感激。对于有一点经验的人来说,感觉这应该很容易。

    谢谢, 克里斯

1 个答案:

答案 0 :(得分:1)

这似乎可以解决所有上述测试用例:

^https:\/\/www\.([^?#\s]+)(\?[^\s#]*)?(#.*)?
  • 第1组是https://wwww.之后#?之后的任何内容。
  • 第2组是可选的,与?以及最高#
  • 之后的任何字符相匹配
  • 第3组是可选的,匹配#
  • 之后的任何字符

使用示例https://www.example.com/en-US/tires/wrangler-duratrac?sku=150638601#121

  • 第1组= example.com/en-US/tires/wrangler-duratrac
  • 第2组= ?sku=150638601
  • 第3组= #121

https://www.example.com/en-US/tires/wrangler-duratrac#121

  • 第1组= example.com/en-US/tires/wrangler-duratrac
  • 第2组为空
  • 第3组= #121