2014-10-20 20 views
0

这应该很简单,但由于某些原因,它不是。我试图匹配模板文件的名称,该文件可以包含.-_个字符,并始终以.html结尾。有效的例子:匹配模板名称的正则表达式

my-tem-plate.html 
my.tem-plate.html 
my_tem.plate.html 

以我目前的正则表达式:

/(\w|\.|\-|\_)+.html/ 

的道路测试与文件名:

'/src/blabla/select-tab.tpl.html' 

我的阵列,而不只是一个获得了两场比赛。

["select-tab.tpl.html", "l"] 

任何想法如何解决这个问题?

+1

添加下划线试试这个'^ [\ w - ] + \ HTML $',郎咸平,你运行的? – 2014-10-20 12:58:27

+0

'OR'语句可以通过'[\ w \。\ - \ _] +' – 2014-10-20 12:58:42

+2

*可以更简单和更具可读性*可*包含或*必须*包含? – 2014-10-20 12:58:52

回答

1

你的表情已经是(有点)工作:当您使用str.match(/regex/)在JavaScript中,它返回由

  • 了全场比赛的第一个项目
  • 捕获的值由作为以下项目的数组

/(\w|\.|\-|\_)+.html/您正在使用捕获组(...),结果中的第二项是捕获的值(这里是.html之前的最后一个字母)。

你可以只放弃一切,除了你的所得数组中的第一个项目,但因为你不需要捕获在首位这个值,你可以只使用来代替:

/[\w.-]+\.html/ 

最重要的是,几点意见

  • 表示任何字符可以在字符集可以使用使用character class[...](请注意,元字符是不同的存在)
  • \w[0-9a-zA-Z_]一个快捷方式,无需手动