JavaScript删除<之间的文本和>

时间:2017-01-26 15:40:00

标签: javascript regex string replace

这是我的示例字符串......

<span>&nbsp;</span><span class="citation_text" id="_148511159">Rawls, Wilson.&nbsp;
<i>Where the Red Fern Grows: The Story of Two Dogs and a Boy</i>. Garden City, NY: Doubleday, 1961. Print.</span>

我想删除<>中的所有文字,但请保留<i></i>的文字。 我得到的最接近的是这段代码

string.replace(/<.[^i]+?>/g,"")

然而它会返回

&nbsp;<span class="citation_text" id="_148511159">Rawls, Wilson.&nbsp;
<i>Where the Red Fern Grows: The Story of Two Dogs and a Boy</i>. Garden City, NY: Doubleday, 1961. Print.

如何删除<>中的最终范围?

谢谢!

更新:这就是我想要的输出。

&nbsp;Rawls, Wilson.&nbsp; <i>Where the Red Fern Grows: 
The Story of Two Dogs and a Boy</i>. Garden City, NY: Doubleday, 1961. Print.

1 个答案:

答案 0 :(得分:1)

  

注意:正如其他人所说,你不应该使用正则表达式来解析HTML   但是如果你真的想要一个正则表达式,那么除了<i>之外,还有一个删除标签。

正则表达式

/<\/?(?!i>)\w+.*?>/g

此表达式将匹配开始和结束标记。

您可以查看以下示例或this demo

实施例

var str = '<span>&nbsp;</span><span class="citation_text" id="_148511159">Rawls, Wilson.&nbsp; <i>Where the Red Fern Grows: The Story of Two Dogs and a Boy</i>. Garden City, NY: Doubleday, 1961. Print.</span>';

var result = str.replace(/<\/?(?!i>)\w+.*?>/g, '');

console.log(result);

说明

  • <\/?匹配标记开头和可能的斜杠(用于结束标记)。
  • 如果以下字符为(?!i>),则
  • i>会阻止匹配。
    它将排除<i></i>个标记。
  • \w+代表代码名称(例如span)。
  • .*?>用于关闭标记之前跟随标记名称(或没有任何内容)的任何字符。