2013-06-12 82 views
14

我在我的Gruntfile中有以下行。Gruntfile中的簡單正則表達式

js files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'],

有人能這麼好心告訴我什麼{,*/}*是什麼意思?我知道它試圖匹配腳本文件夾中的所有.coffee文件,但我想知道它是如何做到的。

+1

[Grunt.js globbing patterns doc](http://gruntjs.com/configuring-tasks#globbing-patterns)對「{}」和「*」的含義給出了一些解釋,但我仍然無法完整解釋「{,* /} *」的含義。 –

回答

5

根據the documentation

而且,因爲這是JavaScript的,你不侷限於JSON;你可能會在這裏使用任何有效的JavaScript代碼 。如有必要,您甚至可以編程方式生成配置文件 。

它看起來像{,*/}*JSON匹配:

{ 
'' = empty space matches no character 
, = or 
* = Any Characters (except slash) (wildcard) 
/= literal slash 
} 
* = Any Characters (except slash) (wildcard) 

更新Found another resource

匹配模式

它往往是不切實際的,指定所有s因此Grunt通過 內置節點glob和minimatch庫支持文件名擴展(也稱爲通配符)。

雖然這不是在匹配模式,一個全面的教程,知道 ,在文件路徑:

*任意數量的字符,而不是/

相匹配?匹配單個字符,而不是/

**匹配任何數目的字符,包括/的,只要它是在一個道部分

{}唯一允許一個逗號分隔的列表「或「表達式

!在模式開始時將否定匹配

+0

@SindreSorhus您是否有資源向我們展示它的含義?很有趣我有一個-1,另一個有相同答案的人有+1。那是你嗎? –

+0

嗨,絕對......不知道辛德爾怎麼了 - 我們的答案確實是一樣的。我剛剛提出了你的意見。 – foobarbecue

+0

我也剛剛標記Sindre的評論不具建設性。 – foobarbecue

16

{,*/}匹配腳本和.coffee文件之間的一個或零個目錄。在{}內部實際上有兩個用逗號分隔的匹配項。一個是空白的,在逗號左邊沒有字符。一個是任意數量的字符和一個正斜槓。最後的*與.coffee擴展名前的文件名匹配。

順便說一句,這不是正則表達式,它是通配符。

+0

謝謝。我仍然不清楚爲什麼需要在{}中使用正斜槓。這是什麼意思是'{,*}/*'? –

+3

嗨三,你需要/的原因是在*符合所有字符,除了實際的斜線。它是這樣設置的,例如,通配符'/ */*/*'只能找到目錄樹中兩個目錄深度的文件。 '{,*}/*'只會匹配確實有斜槓的路徑,而'{,* /} *'會使斜槓變爲可選項。 – foobarbecue

+0

謝謝你的回答。這就說得通了。但是,如果是這樣的話,爲什麼它不是'{,*,/} *',基本上再加上一個逗號來分隔斜線和星號? –