文字列からすべての改行を削除する方法


440

textareaにテキストがあり、.value属性を使用してそれを読みました。

Enter.replaceを正規表現で使用して、テキストからすべての改行(を押すと生成される文字)を削除したいのですが、正規表現で改行をどのように指定しますか?

それが不可能な場合、別の方法はありますか?


回答:


501

これはおそらくFAQです。とにかく、改行(より良い:改行)は、復帰(CR、\r古いMacの場合)、改行(\nLinuxを含むUnicesの場合はLF、)、またはCRの後にLF(\r\nWinDOSの場合)のいずれかになります。(別の答えとは異なり、これは文字エンコーディングとは関係ありません。)

したがって、RegExpすべてのバリアントに一致する最も効率的なリテラルは

/\r?\n|\r/

文字列内のすべての改行に一致させる場合は、グローバル一致を使用します。

/\r?\n|\r/g

それぞれ。次に、replace他のいくつかの回答で提案されている方法を続行します。(おそらく、改行を削除したくはありませんが、改行をスペース文字などの他の空白で置き換えて、単語が損なわれないようにします。)


16
:完全を期すために、Unicodeの4つの異なる改行文字があることに留意しなければならない\u000aか、\n改行しています、。\u000dまたは\r、キャリッジリターンです。\u2028、行区切り文字。と\u2029、段落区切り文字。ただし実際には、ほとんどの場合、投稿した正規表現で十分です。
Mathias Bynens、2012年

4
@MathiasBynensありがとうございます。ただし、U + 2028とU + 2029は明示的にHTML(4.01)の改行を構成しません。これは、DOMツリーとtextarea
PointedEars

5
@PointedEarsはい。ただし、textareaを.value動的に設定する場合など、HTMLシリアル化は行われませんtextarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true。しかし、これはおそらくエッジケースです。先ほど述べたように、ほとんどの場合、正規表現で十分です。
Mathias Bynens、2012年

2
@MathiasBynens U + 2028およびU + 2029はHTML(4.01)で改行を構成しないため、その割り当ては、主要なDOM実装およびレイアウトエンジンを使用して、テキスト領域に2行を表示しませ。したがって、そもそもそのような考えをする人は誰もいないでしょう。
PointedEars 2012年

1
これを機能させるには、円記号をエスケープする必要がありました。つまり、textIn.replace(/(\\ r \\ n | \\ n | \\ r)/ gm、 "")です。まだ+1。ありがとう
カニのバケツ

511

改行を見つける方法は、オペレーティングシステムのエンコーディングによって異なります。Windowsはそう\r\nですが、Linuxだけが使用し\n、Appleが使用し\rます。

私はこれをJavaScriptの改行で見つけました:

someText = someText.replace(/(\r\n|\n|\r)/gm, "");

これであらゆる種類の改行が削除されます。


18
なぜ分離していて\r\n \n それ \rよりも優れているの/[\n\r]/gですか?確かに、各文字を2つの可能なオプションのセットに対してチェックするだけでよいので、これは本来あるべき速度よりも遅くなります。
2014

2
/ [\ n \ r] / gを使用してnode.jsのmemcachedから返されたデータを解析するとき、私にとってはうまくいきました。コーディングに感謝します!答えのオプションはそれを破壊した。
カイルクーツ2018

111

var str = " \n this is a string \n \n \n"

console.log(str);
console.log(str.trim());

String.trim() 文字列の最初と最後から空白を削除します...改行を含みます。

const myString = "   \n \n\n Hey! \n I'm a string!!!         \n\n";
const trimmedString = myString.trim();

console.log(trimmedString);
// outputs: "Hey! \n I'm a string!!!"

ここにフィドルの例があります:http : //jsfiddle.net/BLs8u/

注意!文字列の最初と最後だけをトリミングし、文字列の途中の改行や空白は削除しません。


33
これは、文字列の最初と最後から改行を削除するだけです。OPは、すべての改行を削除する方法を尋ねました。
Ian Walter、

4
はい、オプションとして追加します。
RobW

1
文字列の最初と最後-私が必要とするもののために働いた。ありがとう!
ハーリン

46

\n正規表現で改行や改行に使用でき\rます。

var str2 = str.replace(/\n|\r/g, "");

異なるオペレーティングシステムは、様々の混合物を用いて、異なる行末を使用\nして\r。この正規表現はそれらすべてを置き換えます。


これは最初の出来事に取って代わるだけだと思います
Sebas

5
/\n|\r/gより効率的に書かれ/[\n\r]/gてい/[\n\r]+/gます。絶対に必要でない限り、交替は避けてください。
PointedEars、2012年

これが不満であるかどうかはわかりません。それは私が言ったことを行います:その16進数の範囲にないすべてのものを削除します。どの文字がどの文字であるかはもちろん文字セットに依存しますが、この投稿はASCIIに関するものでした。
masi

22

CRとLFを含むすべての制御文字を削除したい場合は、これを使用できます。

myString.replace(/[^\x20-\x7E]/gmi, "")

印刷できない文字はすべて削除されます。これは、ASCII HEXスペース内にないすべての文字0x20-0x7Eです。必要に応じてHEX範囲を自由に変更してください。


2
それはまた、....、英語以外の言語からいくつかの国家の文字を削除します
smentek

21

最も簡単な解決策は次のとおりです。

let str = '\t\n\r this  \n \t   \r  is \r a   \n test \t  \r \n';
str.replace(/\s+/g, ' ').trim();
console.log(str); // logs: "this is a test"

.replace()/\s+/g正規表現が変化しているすべてのグループ全体の文字列に1つのスペースにホワイトスペース文字のを、我々は.trim()結果は前とテキストの後、すべての超過ホワイトスペースを削除します。

空白文字と見なされます:
[ \f\n\r\t\v​\u00a0\u1680​\u2000​-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]


素晴らしいが、私はそれが働いて得る再割り当て変数を:str = str.replace(/\s+/g, ' ').trim();
フレッド・K


15

改行文字を削除するには、これを使用します。

yourString.replace(/\r?\n?/g, '')

次に、文字列をトリミングして、先頭と末尾のスペースを削除できます。

yourString.trim()

6

PointedEarsが提供する答えは、私たちのほとんどが必要とするすべてです。しかし、Mathias Bynensの回答に従って、私はWikipediaの旅行に行って、これを見つけました:https : //en.wikipedia.org/wiki/Newline

以下は、上記のWikiページでこの回答時に「改行」と見なされるすべてを実装するドロップイン関数です。

何かがあなたのケースに合わない場合は、それを取り除いてください。また、あなたがパフォーマンスを探しているなら、これはそれではないかもしれませんが、どんな場合でも仕事をするクイックツールにとって、これは役に立ちます。

// replaces all "new line" characters contained in `someString` with the given `replacementString`
const replaceNewLineChars = ((someString, replacementString = ``) => { // defaults to just removing
  const LF = `\u{000a}`; // Line Feed (\n)
  const VT = `\u{000b}`; // Vertical Tab
  const FF = `\u{000c}`; // Form Feed
  const CR = `\u{000d}`; // Carriage Return (\r)
  const CRLF = `${CR}${LF}`; // (\r\n)
  const NEL = `\u{0085}`; // Next Line
  const LS = `\u{2028}`; // Line Separator
  const PS = `\u{2029}`; // Paragraph Separator
  const lineTerminators = [LF, VT, FF, CR, CRLF, NEL, LS, PS]; // all Unicode `lineTerminators`
  let finalString = someString.normalize(`NFD`); // better safe than sorry? Or is it?
  for (let lineTerminator of lineTerminators) {
    if (finalString.includes(lineTerminator)) { // check if the string contains the current `lineTerminator`
      let regex = new RegExp(lineTerminator.normalize(`NFD`), `gu`); // create the `regex` for the current `lineTerminator`
      finalString = finalString.replace(regex, replacementString); // perform the replacement
    };
  };
  return finalString.normalize(`NFC`); // return the `finalString` (without any Unicode `lineTerminators`)
});

3
まず、これがJSを使用していないことを発見した人のために-「ほとんど」のREフレーバーがサポートさ\Rれます。これは「すべて」の改行です。第二に-なぜ単純ではないのかsomeString.replace(new RegExp(lineTerminators.join('|')), '');
SamWhan 2017年

@ClasG、あなたは良い点を作る。これを書いたときの私の考えは、パフォーマンス上の理由から文字列に存在していたものreplace()に対してのみ実行することでしたlineTerminators
futz.co 2017年

5

正規表現の改行は\ nなので、スクリプトは次のようになります

var test = 'this\nis\na\ntest\nwith\newlines';
console.log(test.replace(/\n/g, ' '));

5

私は私の答えを追加しています。それは上記の単なるアドオンです。私はすべての/ nオプションを試してみましたが機能しませんでした。テキストがサーバーからダブルスラッシュで送られているのを見て、これを使用しました:

var fixedText = yourString.replace(/(\r\n|\n|\r|\\n)/gm, '');

5

以下のこの機能を使用して、あなたの人生を簡単にしてください

最も簡単な方法は、正規表現を使用して文字列内の改行を検出して置き換えることです。この場合、置換する文字列とともに置換関数を使用します。この場合は空の文字列です。

function remove_linebreaks( var message ) {
    return message.replace( /[\r\n]+/gm, "" );
}

上記の式で、gとmはグローバルフラグとマルチラインフラグ用です


2

次のコードを試してください。すべてのプラットフォームで動作します。

var break_for_winDOS = 'test\r\nwith\r\nline\r\nbreaks';
var break_for_linux = 'test\nwith\nline\nbreaks';
var break_for_older_mac = 'test\rwith\rline\rbreaks';

break_for_winDOS.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_linux.replace(/(\r?\n|\r)/gm, ' ');
//output
'test with line breaks'

break_for_older_mac.replace(/(\r?\n|\r)/gm, ' ');
// Output
'test with line breaks'

0

Macでは、\n改行を一致させるために正規表現で使用します。したがって、コードはstring.replace(/\n/g, '')、psになります:続くgは、最初のものだけでなくすべてに一致することを意味します。

Windowsでは、になります\r\n

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.