如何删除" \ n"没有跟着另一个" \ n"在javascript中

时间:2014-04-15 15:31:29

标签: javascript regex

我想删除“\ 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;

}




}

有人可以帮我解决这个问题吗?

3 个答案:

答案 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');