Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2015, 16:05
Интересующийся
Отправить личное сообщение для scruwi Посмотреть профиль Найти все сообщения от scruwi
 
Регистрация: 24.11.2014
Сообщений: 13

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);
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2015, 16:07
Интересующийся
Отправить личное сообщение для scruwi Посмотреть профиль Найти все сообщения от scruwi
 
Регистрация: 24.11.2014
Сообщений: 13

сам спросил, сам ответил
наверное, нужно в качестве второго аргумента задать функцию, и там уже считать вхождения. или всё же можно средствами самого языка regexp?
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2015, 16:23
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от 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);
Ответить с цитированием
  #4 (permalink)  
Старый 11.02.2015, 16:37
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

var str = '1+1+2+2+2+2';
      
str = str.split('+').filter(function(value, i, arr) {
     return arr.lastIndexOf(value) == i;
}).join('+');
      
alert(str);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После new RegExp null, а без new RegExp array kostyanet Общие вопросы Javascript 19 25.10.2014 12:53
добавить счетчик в счетчик dimon76 Events/DOM/Window 1 28.06.2011 23:06
Помогите усовершенствовать счетчик fredrsf Элементы интерфейса 1 30.06.2010 15:38
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19