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)。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/juliangruber/brace-expansion/actions/workflows/ci.yml) [![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](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, 字符串处理, 开发工具库, 数据可视化, 暗色界面, 自动化攻击