DOMstring анализатор - PullRequest
       23

DOMstring анализатор

0 голосов
/ 31 января 2012

У меня есть объект DOMstring, текст какой-то веб-страницы, которую я получаю с сервера, используя XMLHttpRequest. Мне нужно вырезать из него подстроку, которая лежит между некоторыми конкретными тегами. Есть ли простой способ сделать это? Такие методы, как substring () или slice (), не будут работать в моем случае, потому что содержимое веб-страницы является динамическим, поэтому я не могу указать начало и конец подстроки (я знаю только, что она окружена <tag> и </tag>).

Ответы [ 4 ]

2 голосов
/ 31 января 2012
yourString.subtring(yourString.indexOf('<tag>') + 5, yourString.indexOf('</tag>'));

Это должно работать, если вы знаете имя окружающих тегов.

1 голос
/ 31 января 2012

DOMString просто реализована в виде строки в большинстве (всех?) Браузерных сред JavaScript, поэтому вы можете использовать любую технику синтаксического анализа, которая вам нравится, включая регулярные выражения, DOMParser и анализатор HTML, предоставляемые такими библиотеками, как jQuery.Например:

function extractText(domString) {
  var m = (''+domString).match(/<tag>(.*?)<\/tag>/i);
  return (m) ? m[0] : null;
}

Конечно, это ужасная идея;вам действительно следует использовать синтаксический анализатор DOM, например, с jQuery:

$('tag', htmlString).html();

[Edit] Чтобы пояснить приведенный выше пример jQuery, это эквивалентно выполнению чего-то вроде следующего:

function extractText2(tagName, htmlString) {
  var div = document.createElement('div'); // Build a DOM element.
  div.innerHTML = htmlString; // Set its contents to the HTML string.
  var el = div.getElementsByTagName(tagName) // Find the target tag.
  return (el.length > 0) ? el[0].textContent : null; // Return its contents.
}
extractText2('tag', '<tag>Foo</tag>'); // => "Foo"
extractText2('x', '<x><y>Bar</y></x>'); // => "Bar"
extractText2('y', '<x><y>Bar</y></x>'); // => "Bar"

Это решение лучше, чем решение регулярных выражений, поскольку оно будет обрабатывать любые нюансы синтаксиса HTML, в которых решение регулярного выражения не будет выполнено.Конечно, он, вероятно, нуждается в некотором межбраузерном тестировании, поэтому рекомендация для такой библиотеки, как jQuery (или Prototype, ExtJS и т. Д.).

0 голосов
/ 31 января 2012

Как @Gus, но улучшено, если у вас есть только текст и теги повторяются:

"<tag>asd</tag>".match(/<tag>[^<]+<\/tag>/);
0 голосов
/ 31 января 2012

Предполагая, что окружающий тег уникален в строке ...

domString.match(/.*<tag>(.*)<\/tag>.*/)[0] 

или

/.*<tag>(.*)<\/tag>.*/.exec(domString)[0]

Похоже, это должно сработать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...