我有一个字符串变量,我想在id="resultcount"
元素中提取标题值。输出应为2
。
var str = '<table cellpadding=0 cellspacing=0 width="99%" id="addrResults"><tr></tr></table><span id="resultcount" title="2" style="display:none;">2</span><span style="font-size: 10pt">2 matching results. Please select your address to proceed, or refine your search.</span>';
我尝试了以下正则表达式,但它无效:
/id=\"resultcount\" title=['\"][^'\"](+['\"][^>]*)>/
答案 0 :(得分:3)
由于var str = ...
是Javascript语法,我假设你需要一个Javascript解决方案。正如Peter Corlett所说,你不能使用正则表达式解析HTML,但是如果你使用jQuery,你可以使用它来利用浏览器自己的解析器而不费力地使用它:
$('#resultcount', '<div>'+str+'</div>').attr('title')
如果找不到resultcount或者没有title属性,它将返回undefined
。
答案 1 :(得分:1)
要确保字符串中的哪个属性(id或title)首先出现并不重要,请使用必需ID的整个html元素:
var tag = str.replace(/^.*(<[^<]+?id=\"resultcount\".+?\/.+?>).*$/, "$1")
然后从上一个字符串中找到标题:
var res = tag.replace(/^.*title=\"(\d+)\".*$/, "$1");
// res is 2
但是,正如人们之前提到的那样,使用RegEx来解析html是不可靠的,因为不同的引用(单一而不是双引号)或“错误”位置的空格这样的东西会制造它。
答案 2 :(得分:0)
请参阅前面的回复,标题为“您无法使用正则表达式解析[X] HTML”:
答案 3 :(得分:0)
好吧,因为没有其他人参与其中,我假设你只是在寻找一个值,而不是试图创建一个解析器,我会告诉你PCRE对我有用的东西。我不知道如何将它放入java格式,但我认为你能够做到这一点。
span id="resultcount" title="(\d+)"
你要获得的部分是非被动组$ 1,即'\ d +'部分。它会在引号之间得到一个或多个数字。