регулярное выражение для извлечения текста из HTML - PullRequest
15 голосов
/ 08 октября 2008

Я хотел бы извлечь из общей HTML-страницы весь текст (отображается или нет).

Я бы хотел удалить

  • любые теги HTML
  • Любой JavaScript
  • Любые стили CSS

Есть ли регулярное выражение (одно или несколько), которое достигнет этого?

Ответы [ 12 ]

1 голос
/ 08 октября 2008

Используя синтаксис perl для определения регулярных выражений, можно начать с:

!<body.*?>(.*)</body>!smi

Затем примените следующую замену к результату этой группы:

!<script.*?</script>!!smi
!<[^>]+/[ \t]*>!!smi
!</?([a-z]+).*?>!!smi
/<!--.*?-->//smi

Это, конечно, не отформатирует вещи в виде текстового файла, но удалит весь HTML (в основном, есть несколько случаев, когда он может работать не совсем правильно). Однако лучше всего использовать синтаксический анализатор XML на любом языке, который вы используете, чтобы правильно проанализировать HTML и извлечь из него текст.

0 голосов
/ 08 октября 2008

Я верю, что вы можете просто сделать

document.body.innerText

Который вернет содержимое всех текстовых узлов в документе, видимых или нет.

[edit (olliej): вздох не имеет значения, это работает только в Safari и IE, и я не могу быть обеспокоен загрузкой Firefox по ночам, чтобы увидеть, существует ли он в транке: - /]

...