如何使用JavaScript删除这些标记

时间:2010-10-14 22:39:32

标签: javascript html regex xhtml replace

我还在学习正则表达式(显然),我无法弄明白,我想以正确的方式去做,而不是做很长的路。我怎么能:

查找所有<p></p>并替换\n,但第一个<p>和最后</p>除外,在这种情况下,替换为空,只需删除,对于<br><br /><br/>也替换为\n

使用正则表达式或其他内容。我从jQuery $ .get()返回得到这个。所以,请不要激怒我,我只是不知道该怎么做。

3 个答案:

答案 0 :(得分:0)

Javascript有一个很好的工具来处理xml(或xhtml)DOM。使用those

答案 1 :(得分:0)

在Regex透视图中,要使第一个<p>成为例外,您必须确定使第一个<p>失败的模式。例如,如果第一个<p>之前的文字是abcxyz,即abcxyz<p>,则您搜索前面没有<p>的每个abcxyz,以便第一个<p>不匹配。使用正则表达式,它变为:(?<!abcxyz)<p>

要使最后一个</p>成为例外,您必须确定一个模式,使最后</p>失败。例如,如果上一个</p>之后的文字是abcxyz,即</p>abcxyz,那么您搜索的每个</p>都不会跟abcxyz,所以最后一个</p>不匹配。使用正则表达式,它变为:</p>(?!abcxyz)

虽然JavaScript支持正面和负面的预见,但遗憾的是,JavaScript正则表达式既不支持正面也不支持 look-behind 。实际上,有一些dirty tricks to mimic look-behind in JavaScript,但并不是所有的后视构造都可以被模仿。

因此,如果可能的话,尝试识别使第一个<p>失败的模式,但使用否定前瞻。

要将第一个<p>和最后一个</p>替换为空,您可以颠倒我们上面使用的逻辑,您必须在单独的步骤中执行此操作。

要将<br><br /><br/>替换为\n,请搜索:<br\s*\/?>,并替换为\n

答案 2 :(得分:0)

执行此操作的一种方法是允许浏览器为您执行此操作。在IE和WebKit中,您可以将HTML指定为<div>的innerHTML并获取其innerText。但是,这在Firefox或Opera中不起作用。这是对Selection对象的一个​​有点奇怪的用法:

function getInnerText(html) {
    var text = "";
    var div = document.createElement("div");
    div.innerHTML = html;

    document.body.appendChild(div);
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        sel.removeAllRanges();
        var range = document.createRange();
        range.selectNodeContents(div);
        sel.addRange(range);
        text = sel.toString();
        sel.removeAllRanges();
    } else if (document.body.createTextRange != "undefined") {
        var range = document.body.createTextRange();
        range.moveToElementText(div);
        text = range.text;
    }
    document.body.removeChild(div);
    return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
}