Мне нужно проанализировать шаблон электронной почты для пользовательских переменных, которые встречаются между парами знаков доллара, например:
$foo$bar$baz$foo$bar$baz$wtf
Так что я хотел бы начать с извлечения 'foo' выше, так как он находится между первая пара (1 и 2) знаков доллара. А затем пропустите 'bar', но извлеките 'baz', когда он окажется между следующей парой (3-й и 4-й) знаков доллара.
Я смог выполнить sh с помощью split
и filter
как ниже, но мне интересно, есть ли способ сделать sh то же самое с помощью регулярного выражения вместо этого? Я предполагаю, что можно использовать какой-то формальный синтаксический анализатор, рекурсивный или другой, но, на мой взгляд, это кажется излишним
const body = "$foo$bar$baz$foo$bar$baz$wtf";
let delimitedSegments = body.split('$');
if (delimitedSegments.length % 2 === 0) {
// discard last segment when length is even since it won't be followed by the delimiter
delimitedSegments.pop();
}
const alternatingDelimitedValues = delimitedSegments.filter((segment, index) => {
return index % 2;
});
console.log(alternatingDelimitedValues);
ВЫВОД: ['foo', 'baz', 'bar']
Код также по адресу: https://repl.it/@dexygen / findTextBetweenDollarSignDelimiterPairs