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不匹配。前面的注释为“是”,前面的注释为“否”*/
表示“斜杠以外的任何字符,重复任意次数,后跟斜杠”。斜杠必须在末尾,因为这是正则表达式中的顺序。它不“组合”。