Javascript/Regex:strip first<;p>;如果它与Criteria匹配

Javascript/Regex:strip first<;p>;如果它与Criteria匹配,javascript,regex,Javascript,Regex,因此,我从API中获取HTML内容,有时它会以这种格式出现 <p>::type/12</p> <p>Some content</p> <p>Some more content</p> 我没有使用正则表达式的经验,我将如何处理? 还值得一提的是,我正在使用angular,因此没有jQuery功能 有什么想法吗?如果不使用常规表达式解析HTML,我会这样做 函数getObject(str){ var temp=documen

因此,我从API中获取HTML内容,有时它会以这种格式出现

<p>::type/12</p>
<p>Some content</p>
<p>Some more content</p>
我没有使用正则表达式的经验,我将如何处理? 还值得一提的是,我正在使用angular,因此没有jQuery功能


有什么想法吗?

如果不使用常规表达式解析HTML,我会这样做

函数getObject(str){ var temp=document.createElement(“div”) temp.innerHTML=str 风险值数据={ 类型:未定义, 时间:未定义 }; var elems=temp.getElementsByTagName(“p”) var match=elems[0].textContent.match(/::([^\/]+)\/(.+)/; 如果(匹配){ data.type=匹配[1] data.time=匹配[2] 元素[0]。删除() } data.content=temp.innerHTML; console.log(数据) 返回数据 } var str1=“::键入/12

一些内容

一些其他内容

” var str2=“一些内容

更多内容

” getObject(str1)
getObject(str2)这就是我在不使用常规表达式解析HTML的情况下如何实现的方法

函数getObject(str){ var temp=document.createElement(“div”) temp.innerHTML=str 风险值数据={ 类型:未定义, 时间:未定义 }; var elems=temp.getElementsByTagName(“p”) var match=elems[0].textContent.match(/::([^\/]+)\/(.+)/; 如果(匹配){ data.type=匹配[1] data.time=匹配[2] 元素[0]。删除() } data.content=temp.innerHTML; console.log(数据) 返回数据 } var str1=“::键入/12

一些内容

一些其他内容

” var str2=“一些内容

更多内容

” getObject(str1)
getObject(str2)如果第一段的结构与所有结果一致,则可以使用正则表达式获取类型和时间。基于您的示例,我想说这个正则表达式应该可以工作:

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

它捕获::之后和/之前的字母,还捕获/和之间的数字

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

var results = /<p>::([a-z]+)\/([0-9]+)<\/p>/.exec(text);
var type = results[1];
var time = results[2];
var results=/:([a-z]+)\/([0-9]+)/.exec(text);
var类型=结果[1];
var时间=结果[2];
对于内容,您也可以在replace中使用此正则表达式

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

注意:仅当所有结果的格式与您提供的格式相同时,此操作才有效。如果某些结果不同,您也需要注意这一点……

如果第一段的结构与所有结果一致,您可以使用正则表达式获取类型和时间。基于您的示例,我想说这个正则表达式应该可以工作:

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

它捕获::之后和/之前的字母,还捕获/和之间的数字

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

var results = /<p>::([a-z]+)\/([0-9]+)<\/p>/.exec(text);
var type = results[1];
var time = results[2];
var results=/:([a-z]+)\/([0-9]+)/.exec(text);
var类型=结果[1];
var时间=结果[2];
对于内容,您也可以在replace中使用此正则表达式

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

注意:仅当所有结果的格式与您提供的格式相同时,此操作才有效。如果某些结果不同,您也需要注意这一点…

不要将regexp用于html…这就是为什么我被告知很多次,但不知道任何其他解决方法如果您的数据仅限于您建议的格式,那么我会说您没有真正解析html。你所拥有的要有限得多。在这种情况下,我会使用正则表达式。我会被作为一个异端分子从软件世界中驱逐出去。当我写完这篇文章时,我的代表将被重置为0,我的帐户将被挂起。你需要将HTML提供给HTML解析器。难道没有一个库可以利用吗?如果你使用的是某种特定的API,并且它的响应格式是可靠的,那么你可以不使用它(有时)。不要将regexp用于html…这就是为什么我被告知很多次,但不知道其他任何方法来解决这个问题如果你的数据仅限于你建议的格式,然后我会说你不是真的在解析HTML。你所拥有的要有限得多。在这种情况下,我会使用正则表达式。我会被作为一个异端分子从软件世界中驱逐出去。当我写完这篇文章时,我的代表将被重置为0,我的帐户将被挂起。你需要将HTML提供给HTML解析器。难道没有一个库可以利用吗?如果您使用的是某种特定的API,并且它的响应格式是可靠的,那么您可以(有时)避开它。谢谢……这非常有帮助!这个和@epascarello的组合就可以了!谢谢,谢谢你…这帮了大忙!这个和@epascarello的组合就可以了!谢谢