Javascript / Regex:首先剥离<p>如果它匹配一个标准

时间:2017-07-06 18:08:07

标签: javascript regex

所以我从API获取HTML内容,有时它会采用这种格式

<p>::type/12</p>
<p>Some content</p>
<p>Some more content</p>

有时不会有第一段...

我想要的是解析该html片段并将相关信息提取为具有以下属性的对象 类型时间内容

所以在上一个例子中它应该转换为:

data = {
    type: 'type',
    time: 12,
    content: '<p>Some content</p><p>Some more content</p>'
}

我也有预期类型的​​数组(不超过10个) allowedTypes = [&#39; type1&#39;,&#39; type2&#39;,...];

所以如果第一个p包含:: type2 /而不是它需要解析的有效对象,否则只需执行

data = {
    type: undefined,
    time: undefined,
    content: '.... all content here'
}

我没有正则表达式的经验,我该如何处理? 另外值得一提的是我正在使用angular,所以没有jQuery功能

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果不使用regualar表达式解析HTML

,我就会这样做

connect

答案 1 :(得分:1)

如果第一段的结构在所有结果之间保持一致,则可以使用正则表达式获取类型和时间。根据你的例子,我会说这个正则表达式应该有效:

/<p>::([a-z]+)\/([0-9]+)<\/p>/

它捕获&lt; p&gt; ::之前和/之后的字母,并且还捕获/和&lt; / p&gt;之间的数字

您可以使用exec方法找到匹配项:

var results = /<p>::([a-z]+)\/([0-9]+)<\/p>/.exec(text);
var type = results[1];
var time = results[2];

对于内容,您也可以在替换中使用此正则表达式

var content = text.replace(/<p>::([a-z]+)\/([0-9]+)<\/p>/, '');

注意:这仅在所有结果的格式与您提供的格式相同时才有效。如果某些结果不同,你也需要照顾它......