Извлечь строку между фигурными скобками, но исключить некоторые - PullRequest
0 голосов
/ 07 ноября 2019

При вводе:

{abcd} {{abcd}} {{{abcd}}}

Как извлечь текст, заключенный в одинарные или тройные скобки? Я не пишу, если двойные скобки окружают его.

Вывод:

{abcd} {abcd}

Второй {abcd} в выводе извлекается из {{{abcd}}}

У вас есть идеи?

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Если вам нужно решение не-regEx, пожалуйста, проверьте это. Я попытался сделать его как можно более простым и обширным, используя обычные методы JS, такие как: Array.fill () и String.split ()

function textExtractor(input, startChar, endChar, count, ignoreFlag) {
  let startExpression = new Array(count).fill(startChar).join("");
  let endExpression = new Array(count).fill(endChar).join("");
  if (ignoreFlag) return input;
  else return input.split(startExpression)[1].split(endExpression)[0];
}

console.log(textExtractor("{abc}", "{", "}", 1, false));
console.log(textExtractor("{{abc}}}", "{", "}", 2, true));
console.log(textExtractor("{{{abc}}}", "{", "}", 3, false));
1 голос
/ 07 ноября 2019

Если вы не одержимы производительностью, сделать это за 2 .replaces() очень просто:

"{abcd} {{abcd}} {{{abcd}}}".replace(/(\s|^){{\w+}}/g,'').replace(/{{({\w+})}}/g, '$1')

1-й шаг replace(/(\s|^){{\w+}}/g,'') удаляет {{}} элементы

2-й шаг replace(/{{({\w+})}}/g, '$1') преобразует {{{}}} в {}

1 голос
/ 07 ноября 2019

Вы можете попытаться использовать регулярное выражение для определения шаблона.

Логика

  • Начните искать шаблон, если { или {{{ является либо началом строки, либо предшествует ейчерез пробел.
  • Захватывать любую строку до } или }}}

Вам придется использовать группы без захвата (?:), чтобы определить начало и конец.

var str = '{abcd} {{efgh}} {{{ijkl}}}';
var regex = /(?:^| )(?:\{|\{{3})(\w+)(?:\}|\}{3})/g

console.log(str.match(regex))

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...