Javascript 不确定如何捕获斜杠符号“/&引用;在我的正则表达式中

Javascript 不确定如何捕获斜杠符号“/&引用;在我的正则表达式中,javascript,regex,parsing,url,Javascript,Regex,Parsing,Url,我目前有一个正则表达式/((http:\/\/.+(.net\/.com\/)|^\/)(.+)$/gm,它提取绝对路径或相对路径的相对URL(我知道该路径将是.com或.net域,或者它可能只是整个相对路径) 它工作得很好,只是我不知道如何将斜杠放入最后一个捕获组。一些例子: http://google.com/abcd/efg (captures "abcd/efg", but I want "/abcd/efg") http://google.com/abcd (captures "abc

我目前有一个正则表达式
/((http:\/\/.+(.net\/.com\/)|^\/)(.+)$/gm
,它提取绝对路径或相对路径的相对URL(我知道该路径将是.com或.net域,或者它可能只是整个相对路径)

它工作得很好,只是我不知道如何将斜杠放入最后一个捕获组。一些例子:

http://google.com/abcd/efg (captures "abcd/efg", but I want "/abcd/efg")
http://google.com/abcd (captures "abcd", but I want "/abcd")
http://google.com/ (Fail)
http://google.com (Fail)
/abcd (captures "abcd", but I want "/abcd")
/ (Fail)
感觉好像我错过了一些明显的东西,任何帮助都将不胜感激。

这是怎么回事:

(?
每个组都是介于
/
包含和下一个
/
排除之间的文本

e、 g

对于
http://google.com/abc/def/ghi
将捕获四个组:

  • /谷歌网站
  • /abc
  • /def
  • /ghi

  • 只需将除第一个之外的所有内容合并,您将收到所需的内容。

    如果没有模式重新排序和分组构造边界更改,您将无法实现这一点

    ((http:\/\/.+(.net\/.com\/))^\/)
    第一个捕获组中,
    /
    斜杠应移动到第二个组
    (.net+)

    我建议使用

    /(http:\/\/.+(\.net|\.com)|^)(\/.+)$/gm
    

    详细信息

    • (http:\/\/.+(\.net|\.com)\^)
      -第一组:
      • http:\/\/.+(\.net|\.com)
        -
        http://
        ,除换行符以外的任何1+字符,
        .net
        .com
        捕获到组2中(如果此组是冗余的,请将
        (\.net|\.com)
        替换为
        。(?:net | com)
      • |
        -或
      • ^
        -字符串的开头
    • (\/.+)
      -第3组(或第2组):斜杠和除换行符以外的任何1+字符

    正则表达式语法看起来不像Java,而是更像Javascript。尽管如此,您可能必须避开斜杠,例如使用
    \/
    。请尝试@WiktorStribiżew
    http://google.com/abc/abc
    会导致奇怪的行为。我认为OP应该将每个
    /abc
    捕获到单独的组中,然后concat@xenteros:我没有什么奇怪的地方。@Thomas Oops,我在regexr上进行测试,所以我只是从那里复制了代码,但我最终会在Java程序中使用它。谢谢你,这是为了我的目的!我不知道你可以单独使用行开始断言。