Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Удаление повторяющихся слов из строки

#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/");

Комментариев нет:

Отправить комментарий