Regex, чтобы не сопоставлять теги с атрибутами? - PullRequest
1 голос
/ 14 сентября 2010

=========================================================================

РЕДАКТИРОВАТЬ: Я использую node.js, поэтому яУ меня нет доступа к DOM, и синтаксический анализ с помощью HTML-парсера не возможен (он недостаточно эффективен, чтобы оправдать прохождение через такое небольшое количество текста)

=========================================================================

Прежде всего, я знаю.HTML + Regex = сбой.Тем не менее, мне просто нужно удалить все теги с атрибутами.

Вот что у меня так далеко:

    exports.strip_tags = function(input, allowed) {
      // Strips HTML and PHP tags from a string
   allowed = (((allowed || "") + "")
     .toLowerCase()
     .match(/<[a-z][a-z0-9]*>/g) || [])
     .join('');
      var tags = /<\/?([a-z][a-z0-9]*)\b[^>]>/gi,
      commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
      return input.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){
        return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
      });
    }

Любой шанс, что кто-то знает, как изменить одно из этих регулярных выражений, чтобыудалить то, что мне нужно?

Чтобы уточнить: эта функция должна удалять все теги с атрибутами, сохранять только разрешенные теги (без атрибутов) и выводить результат.

1 Ответ

1 голос
/ 15 сентября 2010

Преобразуйте его в XHTML, а затем используйте xpath.

HTML-> XHTML-инструменты:

Как вы сказали .... HTML + Regex = fail

...