Javascript正则表达式:如何不捕获右侧的可选字符串

Javascript正则表达式:如何不捕获右侧的可选字符串,javascript,regex,Javascript,Regex,例如,/(www\)?(.+)(\.com)?/.exec(“www.something.com”)将在结果数组的索引1处生成“something.com”。但是,如果我们只想在一个捕获组中捕获“某物”,该怎么办 澄清: 上面的字符串只是一个示例-我们不想假设任何关于后缀字符串(.com)的内容。它也可以是橙色的 只是这一部分可以通过从右到左的匹配在C#中解决(虽然我不知道在JS中有什么方法可以做到),但最终会包含www 当然,将regex与其他字符串方法(如replace/substring)

例如,
/(www\)?(.+)(\.com)?/.exec(“www.something.com”)
将在结果数组的索引1处生成“something.com”。但是,如果我们只想在一个捕获组中捕获“某物”,该怎么办

澄清:

  • 上面的字符串只是一个示例-我们不想假设任何关于后缀字符串(.com)的内容。它也可以是橙色的
  • 只是这一部分可以通过从右到左的匹配在C#中解决(虽然我不知道在JS中有什么方法可以做到),但最终会包含www
  • 当然,将regex与其他字符串方法(如replace/substring)混合使用很容易解决这个问题。但是只有正则表达式有解决方案吗
  • 这将只在
    组中提供
    内容
    。只需使其他组不捕获即可。请参阅演示


    如果您只想捕获“某物”,请在其他部分使用非捕获组:

    /(?:www\.)?(.+)(?:\.com)?/.exec("www.something.com")
    

    ?:
    表示组为非捕获。

    只需从正则表达式中删除最后一个字符(
    )即可:

    最后一个
    允许在没有
    (\.com)
    匹配任何内容的情况下进行有效输出,因此
    (.+)
    可以匹配
    www.
    之后的所有字符

    另一种选择是将贪婪量词
    +
    替换为
    +?
    ,后者总是尝试匹配尽可能多的字符,后者尝试匹配尽可能少的字符:

    (www\.)?(.+?)(\.com)?$
    


    请注意,有必要通过线端锚点(
    $
    )强制匹配整个字符串。

    您确定吗?当我试着这样做的时候,我认为这场比赛是“something.com”。基本上(++)与整个短语“something.com”匹配。请检查。谢谢,但我实际上希望最后一部分是可选的,因此“?”:)www.something也应该返回“something”。第二个很有趣!而且确实解决了这两种情况。。
    (www\.)?(.+?)(\.com)?$