Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   regexp счётчик вхождений (https://javascript.ru/forum/misc/53619-regexp-schjotchik-vkhozhdenijj.html)

scruwi 11.02.2015 16:05

regexp счётчик вхождений
 
есть строка, к примеру str = "1+1+2+2+2+2";
нужно найти все совпадения и привести её к виду "1*2+2*4".
почему-то мне кажется, что у regexp есть внутренний счётчик найденных подстрок. но не могу в документации найти. может что-то напутал?

все, на что меня пока хватило, это:

var str = "1+1+2+2+2+2";
str = str.replace( /(\d+)\+\1/g, "$1*2" ); // но это решает только вопрос нахождения парных чисел
alert(str);

scruwi 11.02.2015 16:07

сам спросил, сам ответил :)
наверное, нужно в качестве второго аргумента задать функцию, и там уже считать вхождения. или всё же можно средствами самого языка regexp?

ksa 11.02.2015 16:23

Цитата:

Сообщение от scruwi
есть строка, к примеру str = "1+1+2+2+2+2";
нужно найти все совпадения и привести её к виду "1*2+2*4".

Как вариант...

var str = "1+1+2+2+2+2";
var a=str.match(/\d+/g);
var o={};
for (var i=0; i<a.length; i++) {
	o[a[i]]=o[a[i]]||0;
	++o[a[i]];
};
var dlm='';
str='';
for (i in o) {
	str+=dlm+i+'*'+o[i];
	dlm='+';
};
alert(str);

ruslan_mart 11.02.2015 16:37

Если просто убрать все совпадения, то:

var str = '1+1+2+2+2+2';
      
str = str.split('+').filter(function(value, i, arr) {
     return arr.lastIndexOf(value) == i;
}).join('+');
      
alert(str);


Часовой пояс GMT +3, время: 16:04.