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

时间:2015-08-12 16:43:17

标签: javascript regex

例如/(www\.)?(.+)(\.com)?/.exec("www.something.com")会导致' something.com'在结果数组的索引1处。但是,如果我们只想捕获某些东西,那该怎么办呢?在一个捕获组?

澄清:

  1. 上面的字符串只是例如 - 我们不想假设有关后缀字符串(上面的.com)的任何内容。它也可能是橙色的。
  2. 这个部分可以通过从右到左的匹配来解决(我不知道在JS中这样做的方法)但是最终会有www。包括在内!
  3. 当然,这个问题很容易解决混合正则表达式与其他字符串方法,如replace / substring。但是,只有正则表达式才有解决方案吗?

3 个答案:

答案 0 :(得分:2)

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

这只会在something中提供groups。只是让其他群组无法捕获。请参阅演示。

https://regex101.com/r/rO0yD8/4

答案 1 :(得分:0)

如果您只想捕获"某些内容",请为其他部分使用非捕获组:

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

?:表示群组为非捕获。

答案 2 :(得分:0)

从正则表达式中删除最后一个字符(?)可以解决问题:

https://regex101.com/r/uR0iD2/1

最后?允许有效输出而(\.com)不匹配任何内容,因此(.+)可以匹配www.之后的所有字符。

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

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

https://regex101.com/r/oY7fE0/2

请注意,必须通过行尾锚点($)强制匹配整个字符串。