У меня есть некоторый javascript, который просматривает строку текста на основе выбора пользователей и оборачивает строку в тег . Что я ищу регулярное выражение, которое просматривало бы строку текста и проверяло существующие теги html в строке, и если они существуют, разбивал диапазон, чтобы он не делал html недействительным.

Например, скажем, у меня есть следующий текст


<p>Lorem ipsum dolor sit amet, <i>consectetur adipiscing elit</i>. 
Curabitur tortor risus, facilisis vitae bibendum sit amet, mattis non dui.</p>

И пользователь выбирает "amet, consectetur". Строка должна заканчиваться как «amet, consectetur», а не tp «amet, consectetur».

1
cangeceiro 23 Мар 2011 в 18:04
2
Будет сложно использовать регулярное выражение для выполнения этой работы. Обычно регулярное выражение — плохая идея для разбора HTML. Пример: я подозреваю, что если закрывающий тег появляется в выделенном фрагменте, вы хотите создать только один блок span? В этом случае в дело вступает семантика, и регулярное выражение не подходит. Посмотрите парсеры HTML.
 – 
M'vy
23 Мар 2011 в 18:12

1 ответ

HTML не следует анализировать с помощью RegEx. См.: RegEx соответствует открытым тегам, кроме автономных тегов XHTML

3
Community 23 Май 2017 в 13:33
Пожалуйста, уточните немного больше (не цитируя ныне известную тираду Бобинса целиком).
 – 
Tim Post
23 Мар 2011 в 18:15
Я бы хотел избежать регулярных выражений для решения этой проблемы. что было бы лучшим подходом?
 – 
cangeceiro
23 Мар 2011 в 18:28
+1 за предупреждение пользователя о проблемах использования RegEx с HTML. Однако обратите внимание, что на вопрос, на который вы ссылаетесь, также опубликован ответ, указывающий, что в некоторых ограниченных случаях разумно анализировать HTML с помощью регулярных выражений. Совершенно верно, что вы не можете использовать регулярное выражение для разбора структуры HTML. Но вы можете использовать регулярное выражение, чтобы определить, что является тегом, а что текстом. Это совсем другая проблема. Я думаю, что вопрос плаката в этом случае может быть обработан регулярным выражением. (Хотя могут быть и лучшие способы решения проблемы.)
 – 
Joel Lee
23 Мар 2011 в 18:36
Ну, плюсы и минусы уже упоминались в теме, поэтому я не буду их повторять. И да, есть случаи, когда синтаксический анализ html с помощью RegEx может иметь смысл (но все же не рекомендуется). Я бы порекомендовал взглянуть на парсеры HTML DOM, которые кажутся мне более естественными для этой задачи.
 – 
Patric
23 Мар 2011 в 19:07