正则表达式JS - 创建没有指定单词的捕获模式

时间:2016-10-20 22:26:13

标签: javascript regex

我正在尝试使用Javascript正则表达式捕获我的域和.html之间的任何字符串(如果存在),但我很难这样做。有什么建议吗?

Regex:
www\.mysite\.com\/(.*)(\.html)    // Does not capture 'www.mysite.com/cat'
www\.mysite\.com\/(.*)(\.html)?   // Captures the '.html'

Test Data:
www.mysite.com/aadvark.html      (capture group should be 'aadvark')
www.mysite.com/bird.html         (capture group should be 'bird')
www.mysite.com/cat               (capture group should be 'cat')

1 个答案:

答案 0 :(得分:1)

这样的很多问题可以通过更具体的点匹配来解决。如果您将.*更改为[^.]*(0 +非.个字符),您将获得预期的结果。

/www\.mysite\.com\/([^.]*)(\.html)?/

这是因为当(\.html)成为可选项时,.*贪婪地继续到最后。这也可以通过使用?进行重复来解决问题"懒惰" (一旦表达式的下一部分匹配就停止);但是,您需要使用$锚定表达式的结尾。

/www\.mysite\.com\/(.*?)(\.html)?$/

我先推荐这个。但是,通过匹配foo.bar中的www.mysite.com/foo.bar.html之类的内容,第二种方式更具包容性。