如何使用Javascript替换Html标签

时间:2016-02-15 01:35:14

标签: javascript html regex

我使用Webservices获取的html内容,但它返回了错误的html格式,这会破坏页面。

它返回我需要纠正的自我关闭锚标记。

<p><a name="Example"/></p>

我正在尝试使用以下代码将上述代码更正为

<p><a name="Example"></a></p>

但它没有用 -

var obj1 = document.getElementsByTagName('html')[0];;
obj1.innerHTML = obj1.innerHTML.replace(/\/><\/p>/g, '></a></p>');

我不确定,但这似乎与我的正则表达式有关。

1 个答案:

答案 0 :(得分:0)

我不认为问题(或至少是最重要的问题)是你的正则表达式。更重要的是,浏览器必须解析格式错误的HTML,并可能以意外的方式在内部切换它。结果甚至可能因浏览器而异。

下面的代码段显示了浏览器尝试解释您提供的输入html的结果。当我在Firefox v44.0.2的Stack Overflow代码段中运行此代码时,<p><a name="Example"/a></p>的输入显示为<p><a name="Example"></a></p><a name="Example"> </a>。请注意,代码至少以3种方式进行修改:

  1. 插入了正确的结束标记
  2. p标记内的html在其外部重复
  3. 重复的代码甚至在空格方面有所不同
  4. 注意:之前我甚至尝试进一步操作。

    因此,很难知道你的正则表达式的输入是什么,使得很难知道如何编写正则表达式或任何其他算法来进一步清理它。如果您可以确定输入html中的大多数错误都是同一类型(例如,多个自动关闭锚标记是唯一的问题),那么可能能够修复&# 34;他们使用,例如,一个正则表达式。但是,如果html以各种方式写得很糟糕,我想知道你是否需要找出另一种方法来清理代码(例如手动?!)。

    &#13;
    &#13;
    var obj1 = document.getElementsByTagName('div')[0];
    var inner = obj1.innerHTML
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;");
    document.write("<p>The following shows what is actually retrieved by 'obj1.innerHTML':</p>");
    document.write(inner);
    &#13;
    <div>
    <p><a name="Example"/></p>
    </div>
    &#13;
    &#13;
    &#13;