反向壳式支撑扩展

时间:2018-10-17 18:31:51

标签: arrays shell brace-expansion

Brace expansion采用一个模式并将其扩展。例如:

sp{el,il,al}l

展开至:

spell spill spall

是否有一种算法(可能使用JavaScript实现)以使构造的字符串最小化的方式进行反向操作?

即,接收数组[spell spill spall]并返回字符串"sp{e,i,a}ll"

2 个答案:

答案 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}"