Sanu0074
@Sanu0074

Как вырезать все вхождения в массив?

Допустим есть строка:
Текст $var{m1}, еще текст + $var{m2}, еще текст $var{m3}

Цель: на выходе получить такой массив ['m1','m2','m2']

Я пробовал сделать так:
str.replace(/\$var\{.{0,}\}/g,()=>{
        console.log(arguments);
});

Но в arguments попадает не то что нужно.
Как правильно вырезать все вхождения в массив?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
<script>
/*
*   Tiny templater v0.0.1, (c)2016, xmoonlight
*/
str = "Когда $var{m1} вышли из $var{m2}, погода $var{m3}.";
re=/\$var{([^}\s]+)}/gi;
vars={'m1':'мы','m2':'парка','m3':'стала портиться'};

function getvars(re,s) {
   var r=[]; while( m = re.exec(s)) r.push(m[1]); return r;
}

function setvars(re,s,a) {
   return s.replace(re,(r,b)=>a[b]);
}

console.log(getvars(re,str)); //Array[3] => ["m1", "m2", "m3"]
console.log(setvars(re,str,vars)); //Когда мы вышли из парка, погода стала портиться.
</script>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DanSorokin
Full-stack developer at onvoya.com
var str = "Текст $var{m1}, еще текст + $var{m2}, еще текст $var{m3}";
var reg = /\$var\{(.*?)\}/g;
var result;
while( result = reg.exec(str)) { console.log(result)}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы