Убрать повторы и регистр первой буквы, цикл и регулярные выражения
Написал такой код:
var textt = "Представляет, дел, один-два, представляет, Один-два, Дел, Один-два";
texttprep = textt.match(/[а-я-]+/giu);
var lenres = texttprep.length;
for(var i = 0; lenres>i; i++){
textt = textt.replace(new RegExp('(^|[^a-zA-Z0-9а-яА-ЯёЁ_-])' + texttprep[i] + '([a-zA-Z0-9а-яА-ЯёЁ_-]*)(?![a-zA-Z0-9а-яА-ЯёЁ_-])', 'giu'),function(full_match, _1st_group){
return(/-/.test(_1st_group) ? full_match + _1st_group : _1st_group + texttprep[i] + _1st_group)+"(слово)";
});
}
textt
Получается ответ:
представляет(слово)(слово), Дел (слово) (слово), Один-два (слово) (слово) (слово), представляет (слово) (слово), Один-два (слово) (слово) (слово), Дел (слово) (слово), Один-два (слово) (слово) (слово)
Как делать так, чтобы первая буква была заглавной и пробелом как в исходном тексте, а (слово) добавилась только один раз (Нужно чтобы цикл подставлял только один раз).
Должен получиться такой ответ:
Представляет (слово), Дел (слово), Один-два (слово), представляет (слово), Один-два (слово), Дел (слово), Один-два (слово)
Ответы (1 шт):
Это потому что вы проходитесь циклом по строке и каждый раз заменяете все слова, в итоге делая замену по несколько раз над словом.
Что делает ваш код:
- Имеем строку
Представляет, дел, один-два, представляет, Один-два, Дел, Один-два - Разбиваем ее регуляркой
/[а-я-]+/giu- получаем"Представляет", "дел", "один-два", "представляет", "Один-два", "Дел", "Один-два" - Проходимся циклом по словам из п.2 и заменяем его на то же слово, но прибавляя "(слово)"
Давайте продемонстрирую:
Заменяем: Представляет. Результат:
Представляет(слово), дел, один-два,Представляет (слово), Один-два, Дел, Один-два
Заменяем: дел. Результат:
Представляет(слово),дел (слово), один-два, Представляет (слово), Один-два,дел (слово), Один-два
Заменяем: один-два. Результат:
Представляет(слово), дел (слово),один-два (слово), Представляет (слово),один-два (слово), дел (слово),один-два (слово)
Заменяем: представляет. Результат:
представляет(слово)(слово), дел (слово), один-два (слово),представляет (слово) (слово), один-два (слово), дел (слово), один-два (слово)
Заменяем: Один-два. Результат:
представляет(слово)(слово), дел (слово),Один-два (слово) (слово), представляет (слово) (слово),Один-два (слово) (слово), дел (слово),Один-два (слово) (слово)
Заменяем: Дел. Результат:
представляет(слово)(слово),Дел (слово) (слово), Один-два (слово) (слово), представляет (слово) (слово), Один-два (слово) (слово),Дел (слово) (слово), Один-два (слово) (слово)
Заменяем: Один-два. Результат:
представляет(слово)(слово), Дел (слово) (слово),Один-два (слово) (слово) (слово), представляет (слово) (слово),Один-два (слово) (слово) (слово), Дел (слово) (слово),Один-два (слово) (слово) (слово)
Я не совсем понял суть задачи, поэтому не могу посоветовать решение, но источник проблемы нашел=)