답변:
이것은 아마도 FAQ 일 것입니다. 어쨌든 줄 바꿈 (더 나은 줄 바꿈)은 캐리지 리턴 ( \r
이전 Mac의 경우 CR, ), 줄 바꿈 ( \n
Linux의 경우 \r\n
Unics의 경우 LF , ) 또는 CR 다음에 LF ( , 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
? 분명히 이것은 가능한 두 가지 옵션 세트에 대해 각 문자를 확인하기 때문에 필요한 것보다 느립니다.
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
정규 표현식이 변화하고 모든 그룹 전체 문자열에서 하나의 공간으로 화이트 스페이스 문자를 우리는 .trim()
결과는 이전과 텍스트 후 모든 초과 화이트 스페이스를 제거합니다.
공백 문자로 간주됩니다 :
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
str = str.replace(/\s+/g, ' ').trim();
PointedEars가 제공하는 답변은 대부분의 사람들이 필요로하는 모든 것입니다. 그러나 Mathias Bynens의 답변에 따라 Wikipedia 여행을 갔고 https://en.wikipedia.org/wiki/Newline을 찾았습니다 .
다음은 위의 위키 페이지가이 답변 당시 "새 줄"로 간주하는 모든 것을 구현하는 드롭 인 기능입니다.
케이스에 맞지 않는 것이 있으면 제거하십시오. 또한 성능을 찾고 있다면 이것이 아닐 수도 있지만 어떤 경우에도 작업을 수행하는 빠른 도구의 경우 유용합니다.
// 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
"모든"줄 바꿈 인 "가장"RE 맛 지원 을 지원 합니다. 둘째-왜 간단하지 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'