所以我从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功能
有什么想法吗?
答案 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>/, '');
注意:这仅在所有结果的格式与您提供的格式相同时才有效。如果某些结果不同,你也需要照顾它......