我使用以下正则表达式将html标记替换为相同的html标记加上换行符:
content = content.replace(new RegExp('(</.*?>)', 'gi'), '$1 \n').replace(/\/>/g,'/> \n');
以下是我网站上发生的事情:
我写了一些文字。我复制了文字。我粘贴到一个div,上面运行,添加换行符。然后我将这个文本复制出div。然后我添加更多内容,并重复该过程。
问题是当我再次执行复制和粘贴时,会向先前的内容添加进一步的换行符。所以我第二次做上面的事情,我得到两个换行符,第三次,三个换行符等等。
如何使上面的表达式用标签和换行符替换标签,并忽略(或再次替换)已经有换行符的标签。
答案 0 :(得分:1)
你可以试试这个:
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;
这会添加一个否定的预测(?!...)
,因此会检查以确保不存在\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');