developer tip

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

copycodes 2020. 11. 13. 23:41
반응형

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


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

이 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 및 "|"만 제거하십시오. 귀하의 정규직에서.


Better solution, as str.split("\n") function creates new array of strings split by "\n" which is heavier than str.match(/\n\g). str.match(/\n\g) creates array of matching elements only. Which is "\n" in our case.

var totalLines = (str.match(/\n/g) || '').length + 1;

 <script type="text/javascript">
      var multilinestr = `
        line 1
        line 2
        line 3
        line 4
        line 5
        line 6`;
      totallines = multilinestr.split("\n");
lines = str.split("\n"); 
console.log(lines.length);
</script>

thats works in my case

참고URL : https://stackoverflow.com/questions/8488729/how-to-count-the-number-of-lines-of-a-string-in-javascript

반응형