【问题标题】:Extracting HTML string within XML tag with jQuery使用 jQuery 在 XML 标记中提取 HTML 字符串
【发布时间】:2014-06-18 08:22:55
【问题描述】:

我已经为此工作了一个星期,我很难过。

我正在尝试使用 jQuery 解析来自 SharePoint 的 RSS 提要。使用$.find 非常适合在提要中提取有效 XML 标记之间的数据,但不幸的是,其中一个标记存储了几个 HTML 标记,而不是像其他标记那样干净整洁的字符串。

我使用以下方法提取标签并将其存储为字符串:

$(xml).find("item").each(function () {
var description = $(this).find('description').text();
})

这给了我描述标签的内容:

<![CDATA[<div><b>Title:</b> Welcome!</div>
<div><b>Modified:</b> 6/10/2014 7:58 AM</div>
<div><b>Created:</b> 6/3/2014 2:55 PM</div>
<div><b>Created By:</b> John Smith</div>
<div><b>Modified By:</b> Samuel Smith</div>
<div><b>Version:</b> 1.0</div>
<div><b>AlertContent:</b> Stop the presses.</div>
<div><b>Team:</b> USA.</div>]]>

现在我的问题是提取和存储有用的位。有没有办法只提取AlertContent:&lt;/b&gt; 之后的文本?使用正则表达式似乎可以做到这一点,但我不知道如何制作一个从粗体标记末尾开始并一直延伸到结束 div 标记开始的过滤器。或者有没有更好的办法通过jQuery的方法?

【问题讨论】:

    标签: javascript jquery xml regex sharepoint


    【解决方案1】:

    你说的很对;正则表达式可以帮助您做到这一点。以下是你可以做到的:

    var alertContent = description.replace(/^.*AlertContent:</b>([^<]*).*$/i, '$1');
    

    WORKING JSFIDDLE DEMO

    【讨论】:

    • 你太棒了!我稍微调整了一下并使用了 $.match。最重要的是,您的正则表达式适用于所有领域。 var alertContent = description.match(/.*AlertContent:&lt;\/b&gt;.([^&lt;]*).*/i);
    • 太棒了!很高兴我能帮上忙。
    【解决方案2】:

    我确定您已经听说过有关使用正则表达式解析 xml 的警告。不过,如果您想知道如何使用正则表达式来做这件事,这个简单的模式就可以做到:

    AlertContent:<\/b>([^<]*)
    
    • 我们首先匹配AlertContent:&lt;/b&gt;
    • 那么否定字符类[^&lt;]* 匹配所有不是&lt; 的字符,括号将它们捕获到第1 组

    我们需要做的就是阅读第 1 组。这里是示例代码:

    var regex = /AlertContent:<\/b>([^<]*)/;
    var match = regex.exec(string);
    if (match != null) {
        alert = match[1];
    }
    

    【讨论】:

    • 非常感谢。我不知道正则表达式如此强大。是时候学习了!
    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 2015-05-12
    • 2016-03-18
    • 2016-04-07
    • 2020-04-29
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    相关资源
    最近更新 更多