[javascript] 자바 스크립트에서 문자열의 줄 수를 계산하는 방법

문자열의 줄 수를 세고 싶습니다.

이 stackoverflow 답변을 사용하려고했습니다.

lines = str.split("\r\n|\r|\n");
return  lines.length;

이 문자열 (원래 버퍼 였음) :

 GET / HTTP/1.1
 Host: localhost:8888
 Connection: keep-alive
 Cache-Control: max-age=0
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (KHTML,like Gecko) Chrome/15.0.874.121 Safari/535.2
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
 Accept-Encoding: gzip,deflate,sdch
 Accept-Language: en-US,en;q=0.8
 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

그리고 어떤 이유로 나는 lines = ‘1’을 얻었습니다.

작동시키는 방법을 아십니까?



답변

정규식을 사용하면 다음과 같이 줄 수를 계산할 수 있습니다.

 str.split(/\r\n|\r|\n/).length

또는 아래와 같이 분할 방법을 시도 할 수 있습니다.

var lines = $("#ptest").val().split("\n");
alert(lines.length);

작업 솔루션 : http://jsfiddle.net/C8CaX/


답변

분할보다 더 짧고 성능이 더 좋은 또 다른 솔루션은 다음과 같습니다.

const lines = (str.match(/\n/g) || '').length + 1


답변

정규식을 사용하여 분할하려면 /.../

lines = str.split(/\r\n|\r|\n/);


답변

흠 예 … 당신이하는 일은 완전히 잘못되었습니다. 당신이 말하면 str.split("\r\n|\r|\n")정확한 문자열을 찾으려고 할 것 "\r\n|\r|\n"입니다. 그것이 당신이 틀린 곳입니다. 전체 문자열에는 그러한 발생이 없습니다. 정말로 원하는 것은 David Hedlund가 제안한 것입니다.

lines = str.split(/\r\n|\r|\n/);
return lines.length;

그 이유는 split 메소드가 JavaScript에서 문자열을 정규 표현식으로 변환하지 않기 때문입니다. 정규식을 사용하려면 정규식을 사용하십시오.


답변

나는 split과 정규식, 문자열을 비교하고 for 루프로 수행하는 성능 테스트를 수행했습니다.

for 루프가 가장 빠른 것 같습니다.

참고 :이 코드 ‘있는 그대로’는 Windows 나 macOS endline에 유용하지 않지만 성능을 비교하는 데는 괜찮습니다.

문자열로 분할 :

split('\n').length;

정규식으로 분할 :

split(/\n/).length;

다음을 사용하여 분할 :

var length = 0;
for(var i = 0; i < sixteen.length; ++i)
  if(sixteen[i] == s)
    length++;

http://jsperf.com/counting-newlines/2


답변

세 가지 옵션이 있습니다.

jQuery 사용 ( jQuery 웹 사이트 에서 다운로드 )-jquery.com

var lines = $("#ptest").val().split("\n");
return lines.length;

Regex 사용

var lines = str.split(/\r\n|\r|\n/);
return lines.length;

또는 for each 루프의 재현

var length = 0;
for(var i = 0; i < str.length; ++i){
    if(str[i] == '\n') {
        length++;
    }
}
return length;


답변

다음은 작동하는 샘플 바이올린입니다.

추가 \ r \ n 및 “|”만 제거하십시오. 귀하의 정규직에서.