使用javascript从文本中仅清除特定的html标记(包含或不包含属性)

时间:2014-01-13 12:30:42

标签: javascript regex html-parsing

说我有以下html作为text / string:

<html>
  <a><span>some text</span></a>
  <a attr='attr_value'><b>Some bold text</b></a>
<html>

如何仅删除所有<a></a>标记(包含或不包含属性),以便获得以下结果:

<html>
  <span>some text</span>
  <b>Some bold text</b>
<html>

纯javascript请(没有JQuery),也许替换+正则表达式(?)

2 个答案:

答案 0 :(得分:1)

最简单的是:

str.replace(/(<a>)|(<a attr='attr_value'>)|(<\/a>)/g, "");

我认为我的rgx是正确的,但如果没有尝试使用http://gskinner.com/RegExr/

答案 1 :(得分:0)

您应该能够使用以下正则表达式删除<a>标记:

/</?a[^>]*>/
  • / ... / - regex delimeters
  • < ... > - 匹配标记本身的开头和结尾
  • /? - 匹配可选的“/”以处理结束标记的开头
  • a - 确保您已捕获<a>代码
  • [^<]* - 匹配任何未关闭代码的字符中的零个或多个

由于HTML <a>标记必须先关闭才能开始另一个HTML标记,因此您可以使用“not not sign”模式([^>])来匹配其中的任何字符。标签

首先将其设置为正则表达式变量,或者在替换中将其包含在内:

var regexATagPattern = new RegExp("</?a[^>]*>", "g");
var new_string = some_string.replace(regexATagPattern, "");

。 。 。要么 。 。

var new_string = some_string.replace(/<\/?a[^>]*>/g, "");

(注意两种方法之间如何创建模式的差异。)

注意:您可能遇到问题的 ONLY 情况是您拥有包含转义“&gt;”字符串值的属性在里面。如果这是一个问题,那么你必须要复杂得多。