Я исследовал эту проблему, которая, как мне кажется, становится все хуже, чем больше я копаю глубже.
Я начал достаточно невинно пытаться использовать это выражение для разбиения строки по тегам HTML 'br':
T = captions.innerHTML.split(/<br.*?>/g);
Это работает в любом браузере (FF, Safari, Chrome), кроме IE7 и IE8 с примером ввода текста, подобным этому:
is invariably subjective. <br />
The less frequently used warnings (Probably/Possibly) <br />
Обратите внимание, что текст примера содержит пробел перед '/' и предшествует новой строке.
Оба следующих параметра будут соответствовать всем тегам HTML в каждом браузере:
T = captions.innerHTML.split(/<.*?>/g);
T = captions.innerHTML.split(/<.+?>/g);
Однако, как ни странно (по крайней мере для меня), этот не работает в FF и Chrome:
T = captions.innerHTML.split(/<br.+?>/g);
Edit:
Это (предлагается несколько раз в ответах ниже) не работает в IE 7 или 8:
T = captions.innerHTML.split(/<br[^>]*>/g);
(Работало на Chrome и FF.)
Мой вопрос: кто-нибудь знает выражение, которое работает во всех текущих браузерах, чтобы соответствовать тегам 'br' выше (но не другим тегам HTML). И может ли кто-нибудь подтвердить, что последний пример выше должен быть действительным совпадением, поскольку в тексте примера перед символом>> присутствуют два символа.
PS - мой тип документа - HTML переходный.
Edit:
Я думаю, у меня есть доказательства, что это относится к поведению string.split () в IE, а не к регулярному выражению в целом. Вы должны использовать split (), чтобы увидеть эту проблему. Я также нашел тестовую матрицу, которая показывает частоту отказов около 30% для тестовых случаев split (), когда я запускал ее в IE. Те же тесты прошли 100% на FF и Chrome:
http://stevenlevithan.com/demo/split.cfm
До сих пор я не нашел решения для IE, и библиотека, предоставленная автором этой тестовой матрицы, не исправила этот случай.