我有以下字符串:
var str='
<span class="productName">Basa fillets</span><br>
Brand:
<span class="brandName">COMPLIMENTS</span><br>
400 <abbr title="Gram" lang="en">gr</abbr>
'
我需要得到'400'(可能是一个词,甚至是句子)。 到目前为止我所拥有的是:
d = str.replace(/<br>/g,'').replace(/<.*<\/.*>/g,'').replace(/\n/g,'').replace(/ */g,'').replace(/brand:/i,'');
它有效,但......好吧,我相信我能做得更好。我的代码中有很多类似的排队替换,我想知道如何改进,所以我更需要一个通用的答案,而不是特定的解决方案。
谢谢!
答案 0 :(得分:5)
不使用字符串工具/正则表达式,而是可以在其上使用DOM方法(是 HTML)。
首先制作一个“假”div并将HTML添加到其中。
var str="\
<span class=\"productName\">Basa fillets</span><br>\
Brand: \
<span class=\"brandName\">COMPLIMENTS</span><br>\
400 <abbr title=\"Gram\" lang=\"en\">gr</abbr>\
";
var fakeDiv = document.createElement('div');
fakeDiv.innerHTML = str;
然后只使用普通的DOM遍历方法来获取所需的节点。根据您的HTML,有很多方法可以访问该元素。
var brandName = fakeDiv.getElementsByClassName('brandName');
var textNode = brandName[0].nextSibling.nextSibling;
console.log(textNode.nodeValue.trim());
DEMO:http://jsfiddle.net/aqpgV/
或者,您可以从<abbr>
元素开始并向后工作。
var gram = fakeDiv.getElementsByTagName('abbr');
var textNode = gram[0].previousSibling;
console.log(textNode.nodeValue.trim());
DEMO:http://jsfiddle.net/aqpgV/1/
然而,你要遍历它取决于你: - )
答案 1 :(得分:0)
<强>正则表达式强>
class="brandName">[^<]+</span><br>[^\w]+([^<]+) <abbr title=
注意:第1组将包含您想要的项目。
答案 2 :(得分:0)
如果你想使用正则表达式,你可以做这样的事情。
var str="\
<span class=\"productName\">Basa fillets</span><br>\
Brand: \
<span class=\"brandName\">COMPLIMENTS</span><br>\
400 <abbr title=\"Gram\" lang=\"en\">gr</abbr>\
";
var myRegexp = /COMPLIMENTS<\/span><br>\W(.*?) <abbr /g;
var match = myRegexp.exec(str);
alert(match[1]);