回答:
これはおそらくFAQです。とにかく、改行(より良い:改行)は、復帰(CR、\r
古いMacの場合)、改行(\n
Linuxを含むUnicesの場合はLF、)、またはCRの後にLF(\r\n
WinDOSの場合)のいずれかになります。(別の答えとは異なり、これは文字エンコーディングとは関係ありません。)
したがって、RegExp
すべてのバリアントに一致する最も効率的なリテラルは
/\r?\n|\r/
文字列内のすべての改行に一致させる場合は、グローバル一致を使用します。
/\r?\n|\r/g
それぞれ。次に、replace
他のいくつかの回答で提案されている方法を続行します。(おそらく、改行を削除したくはありませんが、改行をスペース文字などの他の空白で置き換えて、単語が損なわれないようにします。)
\u000a
か、\n
改行しています、。\u000d
または\r
、キャリッジリターンです。\u2028
、行区切り文字。と\u2029
、段落区切り文字。ただし実際には、ほとんどの場合、投稿した正規表現で十分です。
.value
動的に設定する場合など、HTMLシリアル化は行われませんtextarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true
。しかし、これはおそらくエッジケースです。先ほど述べたように、ほとんどの場合、正規表現で十分です。
改行を見つける方法は、オペレーティングシステムのエンコーディングによって異なります。Windowsはそう\r\n
ですが、Linuxだけが使用し\n
、Appleが使用し\r
ます。
私はこれをJavaScriptの改行で見つけました:
someText = someText.replace(/(\r\n|\n|\r)/gm, "");
これであらゆる種類の改行が削除されます。
\r\n
、 \n
それ \r
よりも優れているの/[\n\r]/g
ですか?確かに、各文字を2つの可能なオプションのセットに対してチェックするだけでよいので、これは本来あるべき速度よりも遅くなります。
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/
注意!文字列の最初と最後だけをトリミングし、文字列の途中の改行や空白は削除しません。
\n
正規表現で改行や改行に使用でき\r
ます。
var str2 = str.replace(/\n|\r/g, "");
異なるオペレーティングシステムは、様々の混合物を用いて、異なる行末を使用\n
して\r
。この正規表現はそれらすべてを置き換えます。
/\n|\r/g
より効率的に書かれ/[\n\r]/g
てい/[\n\r]+/g
ます。絶対に必要でない限り、交替は避けてください。
最も簡単な解決策は次のとおりです。
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();
var str = "bar\r\nbaz\nfoo";
str.replace(/[\r\n]/g, '');
>> "barbazfoo"
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`)
});
\R
れます。これは「すべて」の改行です。第二に-なぜ単純ではないのかsomeString.replace(new RegExp(lineTerminators.join('|')), '');
replace()
に対してのみ実行することでしたlineTerminators
。
次のコードを試してください。すべてのプラットフォームで動作します。
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'