Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gruntjs Grunfile中的简单正则表达式_Gruntjs_Glob - Fatal编程技术网

Gruntjs Grunfile中的简单正则表达式

Gruntjs Grunfile中的简单正则表达式,gruntjs,glob,Gruntjs,Glob,我的Grunfile中有以下行 js 文件:['/scripts/{,*/}*.coffee'], 有人能告诉我,{,*/}*是什么意思吗?我知道它试图匹配脚本文件夹中的所有.coffee文件,但我想知道它是如何做到的。根据: 而且,因为这是JavaScript,所以您不局限于JSON;你可以 在这里使用任何有效的JavaScript。您甚至可以通过编程方式生成 如有必要,请更改配置 看起来{,*/}*是一个JSON匹配: { '' = empty space matches no char

我的
Grunfile
中有以下行

js
文件:['/scripts/{,*/}*.coffee'],

有人能告诉我,{,*/}*是什么意思吗?我知道它试图匹配脚本文件夹中的所有
.coffee
文件,但我想知道它是如何做到的。

根据:

而且,因为这是JavaScript,所以您不局限于JSON;你可以 在这里使用任何有效的JavaScript。您甚至可以通过编程方式生成 如有必要,请更改配置

看起来
{,*/}*
是一个
JSON
匹配:

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

全球化模式

单独指定所有源文件路径通常是不切实际的, 所以Grunt支持通过 内置节点glob和minimatch库

虽然这不是一个关于全球化模式的全面教程,但是你知道吗 在文件路径中:

*匹配任意数量的字符,但不匹配/

??匹配单个字符,但不匹配/

**匹配任意数量的字符,包括/,只要它是路径部分中的唯一内容

{}允许以逗号分隔的“或”表达式列表

!!在模式开始时,将否定匹配


{,*/}
在脚本和.coffee文件之间匹配一个或零个目录。在{}中,实际上有两个匹配项,用逗号分隔。一个为空,逗号左边没有字符表示。一个是任意数量的字符和正斜杠。最后一个*与.coffee扩展名之前的文件名匹配


顺便说一句,这不是正则表达式,它是全球化的。

{}
*
的含义给出了一些解释,但我仍然无法对
{,*/}*
的含义给出完整的解释。@SindreSorhus你有什么资源可以告诉我们它的含义吗?有趣的是,我的答案是-1,而另一个答案相同的人的答案是+1。是你吗?嗨,绝对。。。不知道辛德雷到底怎么了——我们的答案确实是一样的。我刚刚对你的意见投了更高的票。我也只是把辛德雷的评论标记为没有建设性。谢谢。我仍然不清楚为什么正斜杠需要在
{}
中。这是什么意思?
{,*}/*
?您好,您需要/的原因是在全局搜索中,*匹配除实际斜杠以外的所有字符。它是这样设置的,例如,globbing
/*/*/*/*
只查找目录树中两个目录深度的文件
{,*}/*
将只匹配有斜杠的路径,其中as
{,*/}*
将斜杠设置为可选。谢谢您的回答。这是有道理的。但是,如果是这样的话,为什么不添加另一个逗号来分隔斜杠和星形斜杠呢?我应该说“
{,*/}*
使目录及其尾部斜杠可选”而不仅仅是“使斜杠可选”。如果您执行
{,*,/}*
,则您正在匹配以下任一项:1。没什么。有些字符没有斜杠,这将没有效果,因为}后面的*已经允许使用这些字符。只是一个斜杠——所以它只匹配
脚本/
,这是一条奇数路径。您需要
{,*/}*
以便可以匹配
脚本/anythinghere/file.coffee
脚本/file.coffee
。注意:这与
脚本/anythinghere/somethingelhere/file.coffee不匹配。前面的注释为“是”,前面的注释为“否”
*/
表示“斜杠以外的任何字符,重复任意次数,后跟斜杠”。斜杠必须在末尾,因为这是正则表达式中的顺序。它不“组合”。