什么是**字符?


84

我的反应gulpfile中有以下路径:

var path = {
  HTML: 'src/index.html',
  ALL: ['src/js/*.js', 'src/js/**/*.js', 'src/index.html'],
  JS: ['src/js/*.js', 'src/js/**/*.js'],
  MINIFIED_OUT: 'build.min.js',
  DEST_SRC: 'dist/src',
  DEST_BUILD: 'dist/build',
  DEST: 'dist'
};

什么是double glob字符?

我知道单个球是什么...但是双重球是什么? 单球

Answers:


98

它几乎与单个星号相同,但可能包含多个目录级别。

换句话说,while/x/*/y将匹配以下条目:

/x/a/y
/x/b/y

等(用通配符部分只一级目录),双星号/x/**/y匹配了诸如:

/x/any/number/of/levels/y

“任意数量的级别”的概念也包括零(换句话说,/x/**/y/x/y作为其选择之一进行匹配)。


顺便说一句,尽管我不喜欢将大型机归功于任何东西,但我相信自MVS最早使用该功能以来,它就已用于允许在多个级别选择数据集:-)


2
这是没有道理的。如果*表示0个或更多字符,则该模式可能与/ x // y匹配,这是荒谬的。您真正要说的是“任意数量的字符,后跟任意数量的字符”。不就是...哦,我不知道...有多少个字符???
AleksandrH

6
@AleksandrH,不,这不是正常意义上的正则表达式:没有字符匹配只有目录名。这是专门针对分层文件系统的。关于第一点,如果允许使用空目录名称,/x//y则将是完全有效的。但是我从未见过允许使用此功能的文件系统。在第二点上,*意味着匹配“任何目录名称,仅一个级别”(因此不会超出下一个/分隔符),而**意味着“匹配任何数量的级别与每个级别的任何目录名称”(可以跨多个/分隔线)。
paxdiablo

9
值得一提的是对/x/**/y//x/y/也包括在内,这是整齐的。
Yassine Imounachen

24

通常用于指示任意数量的子目录。所以

src/js/**/*.js

会匹配

src/js/files/*.js
src/js/more-files/*.js

etc
etc

8
单个星号也将与您的示例匹配。我认为您的意思是在第二个示例中包括一个额外的子子目录。
西蒙·伊斯特

1
@SimonEast像这样吗?src / js / files / controllers / user.js,src / js / files / models / foo / var.js
AutumnSky

嗯,不是最清楚
Jwan622,

20

**匹配包括正斜杠在内/
*任何字符匹配正斜杠之外的任何字符(仅匹配文件或目录名称)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.