Javascript正则表达式,删除单段换行符

时间:2016-01-03 07:33:17

标签: javascript regex

我有这种格式的文字:

word word,
word word.

word word
word word.

不是特定于那两个单词格式,它只是在这么多字符之前的换行符,而不是一个长段的段落。但我试图让它成为一段长长的段落。所以看起来应该是这样的:

word word, word word.
word word word word.

如果我使用代码text.replace(/$\n(?=.)/gm, " ")并将其输出到终端,我会得到如下文字:

 word word, word word.
 word word word word.

在段落的开头有一个额外的空间,但这对我正在尝试做的事情已经足够好了(尽管如果还有一种方法可以在一个替换函数中删除它而不是那个好的)。问题是,当我将它输出到textarea时,它不会删除\ n字符,我只是得到如下所示的文本:

 word word,
 word word.

 word word
 word word.

我正试图在所有客户端执行此操作,目前在Firefox中运行它。

我不是最好的正则表达式,所以这可能非常简单,我只是无知如何做到这一点。但任何帮助都会非常感激。谢谢!

3 个答案:

答案 0 :(得分:1)

回车是\ r \ n所以你需要使用



text.replace(/$(\r|\n)(?=.)/gm, " ");




答案 1 :(得分:1)

你可能错过了一些\ r \ n,这里有一种方法可以匹配所有类型的新行并且没有额外的空格:

var input = 'word word,\nword word.\n\nword word\nword word.';

            // split if 2 or more new lines
var out = input.split(/(\r\n|\n|\r){2,}?/)
            // split the paragraph by new lines and join the lines by a space
            .map((v) => v.split(/\r\n|\n|\r/).join(' '))
            // there is some spaces hanging in the array, filter them
            .filter((v) => v.trim())
            // join together all paragraphs by \n
            .join('\n');

$('#txt').append(out);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<textarea id="txt"></textarea>

答案 2 :(得分:1)

在满足您请求的代码片段下方,我使用带替换函数的闭包删除了前导空格(由空行引起):

&#13;
&#13;
var regex  = /([^.])\s+/g;

var input  = 'word word,\nword word.\n\nword word\nword word.';

var result = input.replace(regex, function(all, char) {
  return (char.match(/\s/)) ? char : char + ' ' ;
});

document.write('<b>INPUT</b> <xmp>' + input + '</xmp>');
document.write('<b>OUTPUT</b> <xmp>' + result + '</xmp>');
&#13;
&#13;
&#13;

正则表达式突破

([^.])        # Select any char that is not a literal dot '.'
              # and save it in group $1
\s+           # 1 or more whitespace char, remove trailing spaces (tabs too)
              # and all type of newlines (\r\n, \r, \n)

如果由于某种原因你想要保留前导空格,请简化下面的代码,如下所示:

&#13;
&#13;
var regex   = /([^.])\s+/g;
var replace = '$1 ';

var input   = 'word word,\nword word.\n\nword word\nword word.';

var result = input.replace(regex, replace);

document.write('<b>INPUT</b> <xmp>' + input + '</xmp>');
document.write('<b>OUTPUT</b> <xmp>' + result + '</xmp>');
&#13;
&#13;
&#13;