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