juliangruber/brace-expansion
GitHub: juliangruber/brace-expansion
在 JavaScript 中实现与 sh/bash 兼容的花括号字符串展开功能,支持选项列表、数字与字母序列、嵌套展开等语法。
Stars: 215 | Forks: 95
# brace-expansion
JavaScript 中类似于 sh/bash 的 [花括号展开](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html)。
[](https://github.com/juliangruber/brace-expansion/actions/workflows/ci.yml)
[](https://www.npmjs.org/package/brace-expansion)
## 示例
```
import { expand } from 'brace-expansion'
expand('file-{a,b,c}.jpg')
// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
expand('-v{,,}')
// => ['-v', '-v', '-v']
expand('file{0..2}.jpg')
// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
expand('file-{a..c}.jpg')
// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
expand('file{2..0}.jpg')
// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
expand('file{0..4..2}.jpg')
// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
expand('file-{a..e..2}.jpg')
// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
expand('file{00..10..5}.jpg')
// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
expand('{{A..C},{a..c}}')
// => ['A', 'B', 'C', 'a', 'b', 'c']
expand('ppp{,config,oe{,conf}}')
// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
```
## API
```
import { expand } from 'brace-expansion'
```
### const expanded = expand(str, [options])
返回一个包含 `str` 所有可能且有效的展开项的数组。如果未找到任何匹配项,则返回 `[str]`。
`options` 对象可以提供一个 `max` 值,以限制允许的展开数量。该值默认限制为 `100_000`,以防止 DoS 攻击。
```
const expansions = expand('{1..100}'.repeat(5), {
max: 100,
})
// expansions.length will be 100, not 100^5
```
`options` 对象还可以提供一个 `maxLength` 值,以限制所有展开项中的字符总数。该值默认限制为 `4_000_000`,以防止因结果总数虽未超过 `max` 但每个结果项却变得极长而导致内存耗尽。
```
const expansions = expand('{a,b}'.repeat(1500), {
maxLength: 100,
})
// the combined length of expansions will not exceed 100 characters
```
有效的展开包括:
```
;/^(.*,)+(.+)?$/
// {a,b,...}
```
逗号分隔的选项列表,例如 `{a,b}`、`{a,{b,c}}` 或 `{,a,}`。
```
;/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
// {x..y[..incr]}
```
从 `x` 到 `y`(包含边界)的数字序列,带有可选的步长。如果 `x` 或 `y` 以 `0` 开头,所有数字都将进行填充以保持长度一致。同样支持负数和反向迭代。
```
;/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
// {x..y[..incr]}
```
从 `x` 到 `y`(包含边界)的字母序列,带有可选的步长。`x` 和 `y` 必须严格为单个字符,如果指定了步长,`incr` 必须是一个数字。
出于兼容性原因,字符串 `${` 不适用于花括号展开。
标签:Bash特性, CMS安全, GNU通用公共许可证, JavaScript, Node.js, 字符串处理, 开发工具库, 数据可视化, 暗色界面, 自动化攻击