gikami
@gikami
web программист

Как регулярным выражением удалить все теги из строки вместе с содержимым?

Нашел в сети такой код:
'Какой то текст <id>Теги и текст которые нужно удалить</id>. Какой то текст'.replace(/(<([^>]+)>)/ig,'');

Данный код удаляет только теги. Подскажите как удалить все теги из строки вместе с содержимым?
  • Вопрос задан
  • 450 просмотров
Решения вопроса 1
@PavelMos
Удалить надо теги с содержимым или то, что между тегами ?
Данный регексп теги со всем, что находится в угловых скобках, нормально удаляет.
Если нужно удалять текст между тегами, нужно после первого регекспа, который ищет открывающий тег (а не любой) добавить поиск любого текста до закрывающего тега. Регексп может не работать на тексте с несогласующимися тегами

<([^\/>]+)>.*?<.*?\/.*?>

https://regex101.com/r/uxQJjJ/1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Immortal_pony
@Immortal_pony Куратор тега JavaScript
Так как я недолюбливаю регулярные выражения, публикую решение этой задачи без их использования :)
function removeTagsWithContent(str) {
    let result = []
    let inOpeningTag = false
    let inClosingTag = false
    let inContent = false;

    str.split('').forEach((char, i) => {    
    	if (!inOpeningTag && !inContent && char === '<') {
            inOpeningTag = true
            return
        }
        
        if (inOpeningTag && char === '>') {
            inContent = true
            inOpeningTag = false
            return
        }
        
        if (inContent && char === '<') {
            inContent = false
            inClosingTag = true
            return
        }
        
        if (inClosingTag && char === '>') {
            inClosingTag = false
            return
        }
        
        if (!inOpeningTag && !inContent && !inClosingTag) {
            result.push(char)
        }
    })
    
    return result.join('')
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы