2016-04-08 3 views
-1

Я использую Node.js.Как удалить повторяющийся элемент с помощью регулярного выражения?

У меня проблема для обработки следующей строки

<em><em>    - first Occurrence 
<em><em><em>   - second Occurrence 
<em><em><em><em>  - third Occurrence 
<em><em><em><em><em> - fourth Occurrence 

Как удалить кратные и сделать его только один тег?

Любой, кто помогает мне справиться.

Заранее спасибо.

Примечание: Я пытаюсь регулярное выражение "(<em>(<em>)?)"

ответ

1

поиск:

(<em>)+ 

И заменить <em>.

Это найдет еще одну (+) вхождения <em>, один за другим. Тогда все те будут заменены одной <em>, тем самым удаляя дублирующие теги

Live Demo on Regex101


Вот почему ваш RegEx не работает:

(
<em>   # Captures first <em> 
(<em>)?  # Optional <em> 
) 

Так это будет захват, самое большее, <em><em>. Это работает в первом случае, но не с другой. Если есть <em><em><em>, первые 2 объединяются в один, однако последний остается.

Так что для вашей RegEx работать, вы должны запустить его несколько раз (т.е. заменить на исходную строку, а затем заменить на новую замененного строку, а затем заменить на что, и т.д.)

1

Я предполагаю, может быть любой тег, а не только em вас беспокоит. Поэтому я использую .+ в моем регулярном выражении

console.log("<em><em><em><em>".replace(/(<.+?>)+/, "$1")) 

Ideone Demo

Смежные вопросы