繁体   English   中英

如何在JavaScript中删除“ \\ n”,然后再删除“ \\ n”

[英]How can I remove “\n” not followed by another “\n” in javascript

我要删除后面没有另一个“ \\ n”的“ \\ n”。

我在这里有一个示例文本。 我想做的是,当我按下按钮时,我想从下面的textarea HTML标记文本中删除“ \\ n”,而不是另一个“ \\ n”。

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;

}




}

谁能帮我解决这个问题?

或多或少,您要做的处理要多得多。 将您的modifyText函数更改为此:

function modifyText(){
    var pattern = new RegExp("([^\\n])\\n([^\\n])", "g");
    modifiedTextarea.value = originalTextarea.value.replace(pattern, "$1$2");
}

第一个变化是pattern的定义。 您会注意到,最后,我在new RegExp构造函数中添加了, "g" 这将使模式成为全局模式,这意味着在应用模式时,它将影响模式的所有实例

设置好之后,您要做的就是针对字段值调用一次一次替换,并将其分配给目标字段值。


更新:很抱歉砍掉这些字符。 :D我已经更新了正则表达式和替换模式。

现在,正则表达式实际上仅捕获换行符附近的字符,然后在替换中将它们放回原处,而它们之间没有换行符。

您可以使用:

var r = s.replace(/\n\n/g, '\n\n\n').replace(/\n(?!\n)/g, '');
"abcdefg

hijklmnopqrstuvwxyz

1234567890abcde

zzzzz"

要保留双换行符,您可以替换任何在换行符之前和之后的换行符,除了换行符,

modifiedTextarea.value= originalTextarea.value.replace(/(.+)\n(.+)/g,'$1$2');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM