DOMstring解析器

时间:2012-01-31 19:15:40

标签: javascript dom xmlhttprequest web

我有一个DOMstring对象,我使用XMLHttpRequest从服务器获取的某个网页的文本。我需要从中剪切一个子串,它位于某些特定标签之间。有没有简单的方法来做到这一点?像substring()或slice()这样的方法在我的情况下不起作用,因为网页的内容是动态的,所以我不能指定子字符串的开头和结尾(我只知道它被{{包围) 1}}和<tag>)。

4 个答案:

答案 0 :(得分:2)

yourString.subtring(yourString.indexOf('<tag>') + 5, yourString.indexOf('</tag>'));

这应该有效,假设您知道周围标签的名称。

答案 1 :(得分:1)

DOMString只是在大多数(所有?)JavaScript浏览器环境中实现为字符串,因此您可以使用任何您喜欢的解析技术,包括正则表达式,DOMParser和jQuery等库提供的HTML解析器。例如:

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

当然,这是一个可怕的想法;你应该使用DOM解析器,例如,使用jQuery:

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

[编辑] 为了澄清上面的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等)这样的库。

答案 2 :(得分:0)

假设周围的标签在字符串中是唯一的......

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

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

似乎应该这样做

答案 3 :(得分:0)

作为@Gus但改进后,如果您只有文字并重复标记:

"<tag>asd</tag>".match(/<tag>[^<]+<\/tag>/);