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); |
сам спросил, сам ответил :)
наверное, нужно в качестве второго аргумента задать функцию, и там уже считать вхождения. или всё же можно средствами самого языка regexp? |
Цитата:
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); |
Если просто убрать все совпадения, то:
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, время: 21:10. |