我想删除“\ n”后面没有其他“\ n”。
我这里有一个示例文本。我想要做的是,当我按下一个按钮时,我想从下面的文本中删除“\ n”,而不是另一个“\ n”,这是在textarea HTML标记中。
abcdefg
hijklmn
opqrstu
vwxyz
12345
67890
abcde
zzzzz
所以,我期望的结果是这样的。它只删除“\ n”后面没有其他“\ n”。
abcdefg
hijklmnopqrstuvwxyz
1234567890abcde
zzzzz
但实际上我得到的结果就是这个。
abcdefghijklmnopqrstuvwxyz1234567890abcde
zzzzz
这是我现在的javascript代码和HTML代码。
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="remove-line-breaks.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<h1>remove-line-breaks</h1>
<h2>Before</h2>
<textarea id="original-textarea" cols="30" rows="15">
abcdefg
hijklmn
opqrstu
vwxyz
12345
67890
abcde
zzzzz
</textarea>
<br />
<input id ="modify-text-btn" type="submit" value="change" />
<h2>after</h2>
<textarea id="modified-textarea" cols="30" rows="15"></textarea>
</body>
</html>
的Javascript
window.onload = function(){
var modifyTextBtn = document.getElementById("modify-text-btn");
modifyTextBtn.addEventListener("click", modifyText, false);
var originalTextarea = document.getElementById("original-textarea");
var modifiedTextarea = document.getElementById("modified-textarea");
function modifyText(){
var pattern = new RegExp("[^\\n](\\n)[^\\n]");
var newStr = originalTextarea.value;
while (pattern.test(newStr)) {
newStr = newStr.replace(pattern.exec(newStr)[1], "");
}
modifiedTextarea.value = newStr;
}
}
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
或多或少,您进行的处理比您需要的要多得多。将您的modifyText
功能更改为:
function modifyText(){
var pattern = new RegExp("([^\\n])\\n([^\\n])", "g");
modifiedTextarea.value = originalTextarea.value.replace(pattern, "$1$2");
}
第一个变化是pattern
的定义。 。 。你&#39;最后注意,我在, "g"
构造函数中添加了new RegExp
。这使得模式具有全局性,这意味着,当它应用时,它将影响模式的所有实例
设置完成后,您只需针对字段值调用替换一次,并将其分配给目标字段值。
更新:很抱歉切断这些字符。 :D我已经更新了正则表达式和替换模式。
正则表达式现在实际上只捕获了围绕换行符,然后在替换中将它们重新放入,而不会断开它们。
答案 1 :(得分:1)
您可以使用:
var r = s.replace(/\n\n/g, '\n\n\n').replace(/\n(?!\n)/g, '');
"abcdefg
hijklmnopqrstuvwxyz
1234567890abcde
zzzzz"
答案 2 :(得分:0)
要保留双换行符,您可以替换换行符之前和之后的任何换行符 -
modifiedTextarea.value= originalTextarea.value.replace(/(.+)\n(.+)/g,'$1$2');