Реверсивное расширение в стиле оболочки - PullRequest
0 голосов
/ 17 октября 2018

Расширение скобки берет шаблон и расширяет его.Например:

sp{el,il,al}l

Расширяется до:

spell spill spall

Существует ли алгоритм (возможно, с реализацией JavaScript), чтобы сделать обратное способом, минимизирующим построенную строку?

т.е. взять массив [spell spill spall] и вернуть строку "sp{e,i,a}ll"

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Как и требовалось в исходном вопросе, node-brace-compress содержит реализацию JavaScript.Например,

var compress = require('brace-compression');
var data = [
  'foo-1',
  'foo-2',
  'foo-3'
];

console.log(compress(data));
// => "foo-{1..3}"
0 голосов
/ 18 октября 2018

Минимизация получающейся строки может быть выполнена разными способами, но, поскольку вы упомянули Bash, я выберу способ Bash, который не является наиболее оптимизированным.

Да, есть способ Bash!Создатели Bash включили его в команду readline complete-into-braces.При использовании Bash в интерактивном режиме, если вы нажмете Meta { (что означает либо Alt {, либо Esc - затем- { на моей машине), все возможные дополнения сгруппированы в одно расширение скобок.

$ echo /usr/
bin/     games/   include/ lib/     local/   sbin/    share/   src/  

$ echo /usr/{bin,games,include,l{ib,ocal},s{bin,hare,rc}}

Выше, когда я впервые нажал Tab , чтобы показать всевозможные завершения, и во второй раз я нажимаю Alt {.

Возвращаясь к вашему вопросу: вы ищете алгоритм.Очевидно, что вы можете найти что-то в исходном коде Bash .Функция, которую вы ищете: really_munge_braces() in bracecomp.c

...