我正在构建一个 chrome 扩展,它将读取当前页面并从中检测特定的 html/xml 标签:
例如,如果我的当前页面包含以下标签或数据:
some random text here and there
<investmentAccount acctType="individual" uniqueId="1629529524">
<accountName>state bank of america</accountName>
<accountHolder>rahul raina</accountHolder>
<balance balType="totalBalance">
<curAmt curCode="USD">516545.84</curAmt>
</balance>
<asOf localFormat="MMM dd, yyyy">2013-08-31T00:00:00</asOf>
<holdingList>
<holding holdingType="mutualFund" uniqueId="-2044388005">
<description>Active Global Equities</description>
<value curCode="USD">159436.01</value>
</holding>
<holding holdingType="mutualFund" uniqueId="-556870249">
<description>Passive Non-US Equities</description>
<value curCode="USD">72469.76</value>
</holding>
</holdingList>
<transactionList/>
</investmentAccount>
</site>
some data 123
<site name="McKinsey401k">
<investmentAccount acctType="individual" uniqueId="1629529524">
<accountName>rahuk</accountName>
<accountHolder>rahuk</accountHolder>
<balance balType="totalBalance">
<curAmt curCode="USD">516545.84</curAmt>
</balance>
<asOf localFormat="MMM dd, yyyy">2013-08-31T00:00:00</asOf>
<holdingList>
<holding holdingType="mutualFund" uniqueId="1285447255">
<description>Special Sits. Aggr. Long-Term</description>
<value curCode="USD">101944.69</value>
</holding>
<holding holdingType="mutualFund" uniqueId="1721876694">
<description>Special Situations Moderate $</description>
<value curCode="USD">49444.98</value>
</holding>
</holdingList>
<transactionList/>
</investmentAccount>
</site>
所以我需要识别say标签并打印开始和结束标签之间的文本,即:“State bank of America”和“rahukk”
所以这就是我到目前为止所做的:
function countString(document_r,a,b) {
var test = document_r.body;
var text = typeof test.textContent == 'string'? test.textContent : test.innerText;
var testRE = text.match(a+"(.*)"+b);
return testRE[1];
}
chrome.extension.sendMessage({
action: "getSource",
source: "XML DETAILS>>>>>"+"\nAccount name is: " +countString(document,'<accountName>','</accountName>')
});
但这只会打印它在页面中遇到的第一个标签的内部文本,即“美国国家银行”。
如果我只想打印页面中最后一个标签的内部文本“rahukk”或两者都打印怎么办。
如何打印它在页面中遇到的最后一个标签的内部文本,或者它如何打印所有标签?
提前致谢。
编辑:上面的文档本身是一个 HTML 页面,我刚刚放置了页面的内容
更新:所以我在这里和那里从下面的建议中做了一些,并且我可以通过这段代码达到最好的效果:
function countString(document_r) {
var test = document_r.body;
var text = test.innerText;
var tag = "accountName";
var regex = "<" + tag + ">(.*?)<\/" + tag + ">";
var regexg = new RegExp(regex,"g");
var testRE = text.match(regexg);
return testRE;
}
chrome.extension.sendMessage({
action: "getSource",
source: "XML DETAILS>>>>>"+"\nAccount name is: " +countString(document)
});
但这给了我:
XML DETAILS>>>>> Retirement Program (Profit-Sharing Retirement Plan (PSRP) and Money Purchase Pension Plan (MPPP)),Retirement Program (Profit-Sharing Retirement Plan (PSRP) and Money Purchase Pension Plan (MPPP)),Retirement计划(利润分享退休计划(PSRP)和货币购买养老金计划(MPPP))
这又是因为相同的 XML 在页面中出现了 3 次,而我想要的是正则表达式只匹配最后一个 XML,我也不想要标签名称。
所以我想要的输出是:
XML DETAILS>>>>> 退休计划(利润分享退休计划(PSRP)和货币购买养老金计划(MPPP))