Javascript DOMstring解析器

Javascript DOMstring解析器,javascript,dom,xmlhttprequest,web,Javascript,Dom,Xmlhttprequest,Web,我有一个DOMstring对象,是我使用XMLHttpRequest从服务器获取的某个网页的文本。我需要从中剪切一个子字符串,它位于一些特定标记之间。有什么简单的方法可以做到这一点吗?像substring()或slice()这样的方法在我的例子中不起作用,因为网页的内容是动态的,所以我不能指定substring的开始和结束(我只知道它被和包围) 假设周围的标记在字符串中是唯一的 domString.match(/.*<tag>(.*)<\/tag>.*/)[0] do

我有一个DOMstring对象,是我使用XMLHttpRequest从服务器获取的某个网页的文本。我需要从中剪切一个子字符串,它位于一些特定标记之间。有什么简单的方法可以做到这一点吗?像substring()或slice()这样的方法在我的例子中不起作用,因为网页的内容是动态的,所以我不能指定substring的开始和结束(我只知道它被
包围)

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

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

/.*(.*).*/.exec(domString)[0]

似乎它应该做到这一点

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

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

/.*(.*).*/.exec(domString)[0]

看起来它应该像@Gus一样发挥作用,但如果您只有文本并且标记被重新放置,它会有所改进:

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

“asd”。匹配(/[^为@Gus,但改进了,如果您只有文本并且标记被重新放置:

"<tag>asd</tag>".match(/<tag>[^<]+<\/tag>/);
“asd”.match(/[^
yourString.substring(yourString.indexOf(“”)+5,yourString.indexOf(“”));
假设您知道周围标记的名称,这应该是可行的。

yourString.substring(yourString.indexOf(“”)+5,yourString.indexOf(“”));

假设您知道周围标记的名称,这应该是可行的。

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

函数提取文本(domString){
var m=(''+domString).match(/(.*)/i);
返回值(m)?m[0]:空;
}
当然,这是一个糟糕的想法;您应该真正使用DOM解析器,例如jQuery:

$('tag',htmlString.html();
[Edit]为了澄清上述jQuery示例,它相当于执行以下操作:

函数extractText2(标记名,htmlString){
var div=document.createElement('div');//构建一个DOM元素。
div.innerHTML=htmlString;//将其内容设置为HTML字符串。
var el=div.getElementsByTagName(标记名)//查找目标标记。
return(el.length>0)?el[0]。textContent:null;//返回其内容。
}
extractText2('tag','Foo');//=>“Foo”
extractText2('x','Bar');//=>“Bar”
extractText2('y','Bar');//=>“Bar”

此解决方案优于正则表达式解决方案,因为它将处理正则表达式解决方案可能失败的任何HTML语法细微差别。当然,它可能需要一些跨浏览器测试,因此建议使用jQuery(或Prototype、ExtJS等)之类的库。

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

函数提取文本(domString){
var m=(''+domString).match(/(.*)/i);
返回值(m)?m[0]:空;
}
当然,这是一个糟糕的想法;您应该真正使用DOM解析器,例如jQuery:

$('tag',htmlString.html();
[Edit]为了澄清上述jQuery示例,它相当于执行以下操作:

函数extractText2(标记名,htmlString){
var div=document.createElement('div');//构建一个DOM元素。
div.innerHTML=htmlString;//将其内容设置为HTML字符串。
var el=div.getElementsByTagName(标记名)//查找目标标记。
return(el.length>0)?el[0]。textContent:null;//返回其内容。
}
extractText2('tag','Foo');//=>“Foo”
extractText2('x','Bar');//=>“Bar”
extractText2('y','Bar');//=>“Bar”

此解决方案优于正则表达式解决方案,因为它将处理正则表达式解决方案可能失败的任何HTML语法细微差别。当然,它可能需要一些跨浏览器测试,因此建议使用jQuery(或Prototype、ExtJS等)之类的库。

不是String.match(regex)而不是regex.match(String)?Opps,是的,javascript的一个可爱的折衷功能是测试在表达式上,但匹配在字符串上:)。现在编辑修复的不是字符串。match(Regex)而不是Regex.match(string)?Opps,是的,javascript的一个可爱的折衷功能是测试在表达式上,但匹配在字符串上:).现在编辑修复谢谢,你的建议和其他一些建议很有效。但这似乎是一种“黑客”当您根据其中的一些单词剪切字符串时。通常情况下,页面内容可能会更改,代码将不起作用。是否有任何方法可以将html页面作为xml文档接收,然后从中提取所需元素?这就是他使用
$('tag',domString).html()所做的;
。它获取字符串“domString”中标记元素的内容,该字符串隐式转换为dom元素。使用jQuery$(aXMLString)将返回dom元素。(我认为它是在创建的元素中使用innerHTML编写的,并通过element.getChildren()返回)谢谢,你的建议和其他一些建议都很有效。但是当你根据其中的一些单词剪切字符串时,这似乎是一种“黑客”行为。通常,页面内容可能会发生变化,代码可能无法工作。有没有办法将html页面接收为xml文档,然后从中提取所需的元素?他就是这么做的
$('tag',domString.html();
。它获取字符串'domString'中标记元素的内容,该字符串隐式转换为dom元素。使用jQuery$(aXMLString)将返回一个dom元素。(我认为它是在创建的元素中使用innerHTML编写的,并通过元素.getChildren()返回)未改进。这不起作用。如果字符串是“标签内的字符串”,则会得到“g”。如果将缺少的*添加到表达式中,则会使其成为
/[^da