Найти и заменить слова в строке

Рейтинг: 0Ответов: 1Опубликовано: 17.07.2023

Мне нужно найти в строке слова, которые длиннее 3 символов, которые не обрамлены тегами и которые сами не являются тегами.

У меня получился такой код:

function replaceLongWords(str) {
  // Регулярное выражение для поиска слов длиннее трех символов,
  // не являющихся тегами и не находящихся внутри тегов
  const regex = /(?<!<[^>]*)\b\p{L}{4,}\b(?![^<]*>)/gu;
  
  // Функция обратного вызова для замены найденных слов
  function replaceCallback(match) {
    // Код замены слова
    // Например, заменим слово на его длину
    return match.length.toString();
  }
  
  // Замена найденных слов с помощью функции обратного вызова
  const replacedStr = str.replace(regex, replaceCallback);
  
  return replacedStr;
}

const inputString = "Это пример <b>текст</b> с некоторыми <span>test</span> словами длиннее трех символов, которые не являются тегами, и которые не находятся внутри <i>каких-либо</i> тегов.";
const result = replaceLongWords(inputString);
console.log(result);

но проблема в том что он не видит почему-то русских слов.

буду благодарен за помощь!

Ответы

▲ 0

Можно решить проблему так:

let str = "Это пример <b>текст</b> с некоторыми <span>test</span> словами длиннее трех символов, которые не являются тегами, и которые не находятся внутри <i>каких-либо</i> тегов."

Убираем все тэги и всё что внутри них:

const regexp = /<[^>]+>[^>]+>/g;
str = str.replaceAll(regexp, "")

Убираем знаки препинания:

const exclude = [".", ",", ":", "!", "?"]
for (e of exclude) {
    str = str.replaceAll(e, "")
}

Разбиваем на слова и выводим их:

for (word of str.split(" ")) {
    if (word.length > 3) {
        console.log(word)
    }
}

Не совсем понятно в чём именно задача, просто получить такие слова или именно заменить их, если заменить то можно искать полученные слова с помощью indexOf и заменять