使用Regex删除html元素并保留内容

时间:2013-05-17 04:31:01

标签: javascript regex

假设我有以下html

<b>Item 1</b> Text <br>
<b>Item 2</b> Text <br>
<b>Item 3</b> Text <br>
<p><font color="#000000" face="Arial, Helvetica, sans-serif"><b>Item 4:</b></font></p>
<p><font color="#000000" face="Arial, Helvetica, sans-serif">Detailed Description</font></p>

并使用以下正则表达式捕获返回(Item 1:.*?<br>)/gi的数据<b>Item 1</b> Text <br>

如何删除或删除<b>,</b> and <br>

留下

  

第1项文字

我一直试图理解这段代码<(\w+)[^>]*>.*<\/\1>,但到目前为止还没有运气。我在这里看到的所有示例似乎都需要一个id类,我的html没有这样,所以我有点陷入让这些例子适合我的问题。

4 个答案:

答案 0 :(得分:3)

试试这个注册表:<[^>]*>

这将删除包含或不包含属性和结束标记的所有html。

答案 1 :(得分:1)

这应该可以解决问题:

var matches = stringToTest.match(/(Item \d+.*?<br\/?>)/gi);
for (var i = 0; i < matches.length; i++) {
  matches[i] = matches[i].replace(/<[^>]+>/g, '');
}
alert(matches);

如果你有jQuery:

alert(
    $.map(stringToTest.match(/(Item \d+.*?<br\/?>)/gi), function(v) { return v.replace(/<[^>]+>/g, '') })
);

答案 2 :(得分:1)

此正则表达式将匹配 b br 标记:

</?br?\s*/?>

要在Javascript中使用它,你可以这样写:

result = subject.replace(/<\/?br?\s*\/?>/img, "");

所有匹配的标签都将替换为空字符串。

根据我的经验,最好用空格替换 br 标记,并用空字符串替换普通的内联标记。如果这是您想要做的,那么下一个正则表达式只匹配 b 标记:

</?b\s*/?>

并且这只匹配 br 标记:

</?br\s*/?>

答案 3 :(得分:0)

在正则表达式中,()之间的内容表示可以稍后作为变量(\ 1 \ 2 \ 3等)或有时$ 1 $ 2 $ 3访问的捕获组。因此,只需使用它们来捕获您想要的文本。

我认为这个正则表达式适合你:

<b>(Item \d+)</b>(.*?)<br>

详细说明,表达方式意味着:

  • (Item \d+):格式为&#34;项目 [至少1位数] &#34;
  • 的任何字符串
  • (.*?):任意字符组,?可最大限度地减少序列中的字符数。

所以现在在<b>Item 5434</b>hel34lo 0345 345<br>中,正则表达式位于捕获的组之上:

  • \1 =项目5434
  • \2 = hel34lo 0345 345

我从来没有在javascript中编程,但更确切地说,这段代码可能有效:

var myString = "<b>Item 5434</b>hel34lo 0345 345<br>";
var myRegexp = /<b>(Item \d+)</b>(.*?)<br>/g;
var match = myRegexp.exec(myString);
alert(match[1]); // Item 5434 
alert(match[2]); // hel34lo 0345 345