我还在学习正则表达式(显然),我无法弄明白,我想以正确的方式去做,而不是做很长的路。我怎么能:
查找所有<p>
或</p>
并替换\n
,但第一个<p>
和最后</p>
除外,在这种情况下,替换为空,只需删除,对于<br>
,<br />
和<br/>
也替换为\n
。
使用正则表达式或其他内容。我从jQuery $ .get()返回得到这个。所以,请不要激怒我,我只是不知道该怎么做。
答案 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");
}