2011-02-03 5 views
2

Я знаю, что регулярное выражение обычно не должно использоваться для разбора содержимого html. В моем специальном случае я нуждаюсь в них (причина в том, что я использую редактор rte и при вставке в редактор требуется замена атрибутов абзацев).Regex для удаления всех атрибутов из абзаца

У меня есть что-то вроде

<p attribute1="val1" attribute2="val2" attribut="val3" ...>text blah blah</p> 

и мне нужны все атрибуты отщепляемого так, что я получаю

<p>text blah blah</p> 

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

Также оценивается решение для выделения атрибутов из всех возможных тегов html.

ответ

5

Что-то, как это должно работать на всех тегах:

replace(/<\s*(\w+).*?>/, '<$1>') 

В пунктах только, просто заменить \w:

replace(/<\s*p.*?>/, '<p>') 

В \s* в начале позволяет пробелы перед именем тега, так если у вас почему-то есть < p class="foo">, он тоже работает над этим.

+0

и что я использую только для абзацев? – Thariama

+0

работает как шарм - очень спасибо +1 – Thariama

+0

'

' недействительно HTML – winhowes

0
perl -lpe 's/(<\w+)\s+[^>]*/$1/' 
+3

извините, не видел javascript тег. Пойдите с Solnn Tatu, который также учитывает пространство в начале, как отмечено. –

3

Поскольку HTML тег не может иметь пробелы перед именем тега и может продолжаться в течение нескольких строк, я бы рекомендовал вместо этого:

replace(/<(\w+)(.|[\r\n])*?>/, '<$1>'); 

И только параграфов:

replace(/<p\s+?(.|[\r\n])*?>/, '<p>'); 
+1

Работал, но не забудьте добавить g (/<(\w+)(.|[\r\n])*?>/g), если вы хотите очистить весь html. – user3717718

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