Ký tự ** cầu là gì?


84

Tôi có đường dẫn này trong gulpfile phản ứng của mình:

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'
};

Ký tự hình cầu kép là gì?

Tôi biết quả cầu đơn là gì ... nhưng quả cầu kép là gì? cầu đơn

Câu trả lời:


98

Nó gần giống như dấu hoa thị đơn lẻ nhưng có thể bao gồm nhiều cấp thư mục.

Nói cách khác, while /x/*/ysẽ khớp với các mục nhập như:

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

v.v. (chỉ với một cấp thư mục trong phần ký tự đại diện), dấu hoa thị kép cũng/x/**/y sẽ khớp với những thứ như:

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

với khái niệm "bất kỳ số cấp độ nào" cũng bao gồm số 0 (nói cách khác, /x/**/ysẽ khớp /x/ynhư một trong các lựa chọn của nó).


Ngoài ra, vì tôi ghét phải ghi nhận máy tính lớn với bất cứ thứ gì, tôi tin rằng điều này đã được sử dụng kể từ những ngày danh sách tai nghe của MVS để cho phép lựa chọn bộ dữ liệu ở nhiều cấp :-)


2
Điều này không có ý nghĩa. Nếu * biểu thị 0 hoặc nhiều ký tự, thì mẫu đó có thể khớp với / x // y, điều này là vô nghĩa. Những gì bạn thực sự đang nói là "bất kỳ số ký tự nào, theo sau là bất kỳ số ký tự nào". Đó không phải chỉ là ... oh, tôi không biết ... bất kỳ số lượng ký tự nào ???
AleksandrH

6
@AleksandrH, không, đây không phải là regex theo nghĩa thông thường: không có ký tự khớp nào , chỉ có tên thư mục. Điều này đặc biệt dành cho các hệ thống tệp phân cấp. Về điểm đầu tiên của bạn, nếu tên thư mục trống được cho phép, /x//ysẽ hoàn toàn hợp lệ. Tuy nhiên, tôi chưa bao giờ thấy một hệ thống tệp nào cho phép điều này. Về điểm thứ hai, *phương tiện đối sánh "bất kỳ tên thư mục nào, chỉ một cấp" (vì vậy sẽ không vượt ra ngoài /dải phân cách tiếp theo ) trong khi **có nghĩa là "khớp với bất kỳ số cấp nào với bất kỳ tên thư mục nào ở mỗi cấp" (có thể vượt qua nhiều /bộ chia khi cần thiết).
paxdiablo

9
Cần lưu ý rằng for /x/**/y/, /x/y/cũng được bao gồm, đó là gọn gàng.
Yassine Imounachen

24

Nó thường được sử dụng để chỉ ra bất kỳ số lượng thư mục con nào. Vì thế

src/js/**/*.js

Sẽ phù hợp

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

etc
etc

8
Một dấu hoa thị cũng sẽ phù hợp với các ví dụ của bạn. Tôi nghĩ rằng bạn muốn bao gồm một thư mục con bổ sung vào ví dụ thứ hai của bạn.
Simon East

1
@SimonEast như thế này? src / js / files / controllers / user.js, src / js / files / models / foo / var.js
AutumnSky

ơ, không phải là rõ ràng nhất
Jwan622

20

**khớp với bất kỳ ký tự nào bao gồm dấu gạch chéo lên sẽ /
*khớp với bất kỳ ký tự nào ngoại trừ dấu gạch chéo lên (để chỉ khớp với tên tệp hoặc thư mục)


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.