0

我正在尝试使用正则表达式获取 URI 段。

示例 URI:

http://abc.com/hello/hi/bye?humm/ok=hi&ya=yaya/wow/waaah
               ^^^^^ ^^ ^^^                    ^^^ ^^^^^

我在尝试:

/(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

但它不能正常工作。查询字符串未被排除 ( wow/waaah)。

因此,当我尝试以下操作时,一切都被排除在外:

/(?<!?.+)(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

这有什么问题?

4

1 回答 1

1

您忘记在?第二个正则表达式中转义第二个。它应该是:

/(?<!\?.+)(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

注意:您可以通过使用如下字符类来改进正则表达式:

/(?<!\?.+)(?<=\/)[\w-]+(?=[/\r\n?]|$)/g

编辑:

对于满足所有不同风格的正则表达式的最低公分母解决方案,您需要一个两步过程:

  • 删除尾随?和所有后续字符(如果存在):


    ^[^/]+//[^/]+([^?]+)

    将返回的字符串保留在捕获组 1 中。

  • 通过循环提取 URI 段:


    /([\w-]+)

    段在捕获组 1 中返回。

于 2013-01-24T23:53:56.960 回答