HTML标签末尾的换行符?

时间:2016-02-22 16:09:20

标签: javascript jquery regex

我使用以下正则表达式将html标记替换为相同的html标记加上换行符:

content = content.replace(new RegExp('(</.*?>)', 'gi'), '$1 \n').replace(/\/>/g,'/> \n');

以下是我网站上发生的事情:

我写了一些文字。我复制了文字。我粘贴到一个div,上面运行,添加换行符。然后我将这个文本复制出div。然后我添加更多内容,并重复该过程。

问题是当我再次执行复制和粘贴时,会向先前的内容添加进一步的换行符。所以我第二次做上面的事情,我得到两个换行符,第三次,三个换行符等等。

如何使上面的表达式用标签和换行符替换标签,并忽略(或再次替换)已经有换行符的标签。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

&#13;
&#13;
var content = "<Test>Test</Test><Test2>Test2</Test2><Test3 /><Test4>Test4</Test4>";
var regexTest = new RegExp('(</.*?>)(?!\\n.*)', 'gi');
var regexTest2 = new RegExp('/>(?!\\n.*)', 'g');
content = content.replace(regexTest, '$1\n').replace(regexTest2,'/>\n');
alert(content);
content = content.replace(regexTest, '$1\n').replace(regexTest2,'/>\n');
alert(content);
//remove linebreaks
content = content.replace(/\n/g, '');
alert(content);
&#13;
&#13;
&#13;

这会添加一个否定的预测(?!...),因此会检查以确保不存在\n。如果你摆脱$1\n以及/>\n之间的空格,那么你就不需要正则表达式中的\\s

答案 1 :(得分:-1)

查找并替换带有标记和换行符的所有标记 它匹配组1中的标记,并可选择匹配单个额外换行符
被删除,然后添加回替换。

content = content.replace( /(<(?:(?:\/?[\w:]+\s*\/?)|(?:[\w:]+\s+(?:(?:(?:"[\S\s]*?")|(?:'[\S\s]*?'))|(?:[^>]*?))+\s*\/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>)(?:\r?\n)?/g, '$1\n');