Brace expansion采用一个模式并将其扩展。例如:
sp{el,il,al}l
展开至:
spell spill spall
是否有一种算法(可能使用JavaScript实现)以使构造的字符串最小化的方式进行反向操作?
即,接收数组[spell spill spall]
并返回字符串"sp{e,i,a}ll"
答案 0 :(得分:3)
可以使用许多不同的方法来最小化结果字符串,但是由于您提到了Bash,因此我将选择Bash的方法,它不是最优化的方法。
是的,有一种Bash方式! Bash创建者已将其包含为readline命令complete-into-braces
。交互使用Bash时,如果您按下 Meta {(即 Alt {或 Esc < / kbd> -then- {在我的计算机上),所有可能的补全都分组为一个大括号扩展。
$ echo /usr/
bin/ games/ include/ lib/ local/ sbin/ share/ src/
$ echo /usr/{bin,games,include,l{ib,ocal},s{bin,hare,rc}}
上面,我第一次点击 Tab 显示所有可能的完成,第二次我点击 Alt {。
回到您的问题:您正在寻找一种算法。显然,您可能在https://github.com/dotnet/standard/issues/575#issuecomment-380479584中找到了一些东西。您要寻找的功能是Bash source code
答案 1 :(得分:1)
根据原始问题的要求,node-brace-compression包含一个JavaScript实现。例如
var compress = require('brace-compression');
var data = [
'foo-1',
'foo-2',
'foo-3'
];
console.log(compress(data));
// => "foo-{1..3}"