2014-10-20 78 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_]一個快捷方式,無需手動