我正在尝试使用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')
答案 0 :(得分:1)
这样的很多问题可以通过更具体的点匹配来解决。如果您将.*
更改为[^.]*
(0 +非.
个字符),您将获得预期的结果。
/www\.mysite\.com\/([^.]*)(\.html)?/
这是因为当(\.html)
成为可选项时,.*
贪婪地继续到最后。这也可以通过使用?
进行重复来解决问题"懒惰" (一旦表达式的下一部分匹配就停止);但是,您需要使用$
锚定表达式的结尾。
/www\.mysite\.com\/(.*?)(\.html)?$/
我先推荐这个。但是,通过匹配foo.bar
中的www.mysite.com/foo.bar.html
之类的内容,第二种方式更具包容性。