首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用javascript和regex检测多个html标记

用javascript和regex检测多个html标记
EN

Stack Overflow用户
提问于 2013-10-23 07:01:37
回答 4查看 267关注 0票数 0

我正在构建一个chrome扩展,它将读取当前页面并从中检测特定的html/xml标记:

例如,如果我的当前页面包含以下标记或数据:

代码语言:javascript
复制
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>

因此,我需要识别例如标签和打印开始和结束标签之间的文本,即:“美国国家银行”和"rahukk“。

到目前为止,这就是我所做的:

代码语言:javascript
复制
    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页面,我刚刚把页面的内容

更新:因此,我从下面的建议和代码所能达到的最好的地方做了一些工作:

代码语言:javascript
复制
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)
});

但这给了我:

DETAILS>>>>>退休计划(利润分享退休计划和货币购买退休金计划)、退休计划(利润分享退休计划)和货币购买退休金计划(MPPP)、退休计划(利润分享退休计划)和货币购买退休金计划(MPPP)

这同样是因为相同的XML在页面中出现了3次,我想要的是正则表达式只与最后一个XML匹配,我也不想要标记名。

所以我想要的输出是:

XML DETAILS>>>>>退休计划(利润分享退休计划和货币购买养老金计划)

EN

回答 4

Stack Overflow用户

发布于 2013-10-23 07:12:11

Regex模式如下:<accountName>(.*?)<\/accountName>

代码语言:javascript
复制
var tag = "accountName";
var regex = "<" + tag + ">(.*?)<\/" + tag + ">";
var testRE = text.match(regex);

=> testRE包含您所有的匹配项,如果tag=accountName包含“美国国家银行”和"rahukk“的话。

更新

根据接收所有匹配的此页,而不是仅接收第一个匹配,to必须向匹配模式添加一个"g“标志。

"g:全局搜索标志使RegExp在整个字符串中搜索一个模式,创建一个与给定模式匹配的所有出现的数组。“发现这里

希望这对你有帮助!

票数 1
EN

Stack Overflow用户

发布于 2013-10-23 07:12:18

匹配方法不是全局的。

代码语言:javascript
复制
var regex = new RegExp(a+"(.*)"+b, "g");
text.match(regex);
票数 1
EN

Stack Overflow用户

发布于 2013-10-23 08:41:44

如果完整XML字符串有效,则可以使用方法将其解析为XML文档。

代码语言:javascript
复制
var xmlString = '<root>[Valid XML string]</root>';
var parser = new DOMParser();
var doc = parser.parseFromString(xmlString, 'text/xml');

然后,您可以直接获得具有指定名称的标记列表:

代码语言:javascript
复制
var found = doc.getElementsByTagName('tagName');

这里有一个使用您提供的XML的jsFiddle实例,有两个小的调整--我必须为第一个site添加一个root元素和一个开始标记。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19534945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档