#javascript
Есть строка, необходимо удалить из неё всё повторяющиеся слова т.е из строки http://spb.site.ru/der/der/ удалить der/ Строка формируется автоматически. var stroka = "http://spb.site.ru/der/der/"; function removeWords( str ) { var lastWord = ''; return str.replace( /([^\s]+)(\s|$)/g, function( all, w, e ){ return lastWord.toLowerCase() == w.toLowerCase() ? '' : ( lastWord = w ) + e; }); } console.log( removeWords( stroka ) ); Подскажите, где неправ, почему работает не верно?
Ответы
Ответ 1
"http://spb.site.ru/der/der/" .match(/(http:\/\/|https:\/\/|[-\.A-Za-z0-9]+\/)/g) .filter((v, i, a) => a.indexOf(v) === i) .join("") Вернет http://spb.site.ru/der/ Идея в том, что мы бьем ссылку на массив из составляющих, дальше фильтруем повторы через filter и обратно клеим в строку. Правда подход довольно специфичен. Будет работать ТОЛЬКО для ссылок и обязателен слэш на конце. Набросал на скору руку, главное идею показал. Можем улучшить :)Ответ 2
В качестве альтернативы, можно воспользоваться возможностью регулярных выражений использовать значения уже захваченных групп. Это позволит найти повторяющиеся части. В простых случаях может помочь следующее регулярное выражение /\/(.+?)\/(.*)\1\/?/ Пример использования: function log(str) { console.log('source', str); console.log('replaced', str.replace(/\/(.+?)\/(.*)\1\/?/, '/$1/$2')); } log("http://spb.site.ru/der/der/"); log("http://spb.site.ru/wander/der/"); log("http://spb.site.ru/derwan/der/"); log("http://spb.site.ru/der/sdf/der/");
Комментариев нет:
Отправить комментарий