node.js에서 여러 줄 문자열을 어떻게 수행합니까?


128

node.js의 등장으로 JavaScript에서 여러 줄 문자열이 점점 더 필요 해지고 있습니다.

  1. 브라우저에서 작동하지 않더라도 Node.JS에서이를 수행하는 특별한 방법이 있습니까?
  2. 내가 지원할 수있는이를 수행하기위한 계획이나 최소한 기능 요청이 있습니까?

나는 이미 당신 \n\이 모든 줄의 끝에 사용할 수 있다는 것을 알고 있습니다 .


1
도대체 왜 하드 라인 리턴을 삽입해야합니까? DOM의 어떤 것도 지원하지 않으며 ( "pre"제외) 다른 모든 일반적인 반환 유형은 상관하지 않습니다.
jcolebrand 2011-06-02

그래서 나는 오른쪽에 리턴없이 왼쪽에 탭으로 끝나지 않습니다. 나는 둘 다 또는 아예없는 것을 좋아합니다. 지금은 print( '<div>')HTML을 인쇄 하는 데 사용 하고 있습니다. 탭도없고 "정리"한 리턴도 없지만 Perl <<EOF..EOF스타일 문자열이나 Java 스타일 JSP 파일 을 사용하는 것이 더 쉬울 것 입니다. 어쨌든 여러 줄 문자열에 변수를 입력 할 수 있어야합니다. 지금은없이 할 것입니다.
Bryan Field

9
@jcolebrand : Node.JS는 주로 DOM 조작과 관련이 없습니다. 완전한 애플리케이션 개발 환경입니다. 참조 nodejs.org을
로이 어설프게

@RoyTinker 그렇습니다. 그러나 그는 당시 브라우저를 불렀고 그 위에 비 \n구현 을 불렀습니다 .
jcolebrand

@GeorgeBailey 여전히 스택 오버플로를 사용하는 경우 여기에서 정답을 수정할 수 있습니까?
mikemaccana

답변:


164

노드 v4 및 현재 버전의 노드

ES6 (및 v4보다 큰 Node 버전)부터 새로운 "템플릿 리터럴"내장 유형이 Javascript에 추가되었습니다 (역 따옴표 "`"로 표시됨). 다음과 같이 여러 줄 문자열을 구성하는 데 사용할 수도 있습니다. :

`this is a 
single string`

평가되는 값 : 'this is a\nsingle string'.

제 1 라인의 끝에서 새로운 라인이 참고 된다 결과 스트링에 포함.

프로그래머가 다음 util.format과 같이 다른 템플릿 도구 를 사용하지 않고도 문자열 리터럴에 값이나 코드를 직접 삽입 할 수있는 문자열을 구성 할 수 있도록 템플릿 리터럴이 추가 되었습니다.

let num=10;

console.log(`the result of ${num} plus ${num} is ${num + num}.`);

"10 더하기 10의 결과는 20입니다." 콘솔에.

이전 버전의 노드

이전 버전의 노드에서는 "줄 연속"문자를 사용하여 다음과 같은 여러 줄 문자열을 작성할 수 있습니다.

'this is a \
single string'

평가되는 값 : 'this is a single string'.

첫 번째 줄 끝의 줄 바꿈 은 결과 문자열에 포함 되지 않습니다.


나는 stackoverflow.com/questions/805107/… 사용하게 될 것이라고 생각 합니다. 변수를 사용할 수 있도록 확장 할 수 있습니다. 확실히 창의적 일 것입니다! 그러나 이것이 Node.JS이기 때문에 브라우저 호환성에 대해 걱정할 필요가 없으며 제 경우에는 버전 호환성도 걱정할 필요가 없습니다.
Bryan Field

6
"Javascript는 여러 줄 문자열을 지원하지 않습니다 ..." ES5에서 지원하며 V8 (Google의 JavaScript 엔진)에 있으므로 아마도 NodeJS (V8 사용)에있을 것입니다. [Section 7.8.4] * ( es5.github.com/#x7.8.4 )의 LineContinuation 을 참조하십시오 . 도구 지원은 당분간 스케치가 될 수 있습니다.
TJ Crowder

그것은 io.js에 있지만 Node.JS에는 아직 없습니다-몇 개의 링크를 더 추가하여 답변을 추가했습니다
Simon D

1
Node 4.0+는 이제 본질적으로 여러 줄 문자열을 지원합니다.
Rob Raisch

46

여러 줄 문자열은 JavaScript의 현재 부분 (ES6 이후)이며 node.js v4.0.0 이상에서 지원됩니다.

var text = `Lorem ipsum dolor 
sit amet, consectetur 
adipisicing 
elit.  `;

console.log(text);

2
이 답변은 즉시 정상에 투표해야합니다! 템플릿 문자열에 대한 자세한 내용 은 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 를 참조하십시오 .
user3413723 dec.

2
템플릿 안에 $ {variablehere} 구문을 추가하여 쉽게 변수를 추가 할 수 있다는 점에 유의할 수 있습니다 (``표시)
Joseph Astrahan

40

여러 줄 문자열을 의미 할 때 정확히 무엇을 찾고 있습니까?

다음과 같은 것을 찾고 있습니까?

var str = "Some \
    String \
    Here";

"Some String Here"로 인쇄되는 것은 무엇입니까?

그렇다면 위의 내용은 유효한 자바 스크립트이지만 그렇지 않습니다.

var str = "Some \ 
    String \
    Here";

차이점이 뭐야? 애프터 공백 \. 디버깅을 즐기십시오.


잘 bollocks. 문자를 넣지 않고 \ 뒤에 공백을 표시하지 않습니다.
jcolebrand 2011-06-02

1
@jcolebrand : 네, 아주 재미가되지 않습니다 : P
로버트


1
이것은 더러운 해킹입니다. 제발 안돼!
Raynos 2011-06-02

1
@Robert에게 감사합니다. '\'통찰력 뒤에있는 공간은 저에게 시간을 절약했습니다!
gpestana

8

node.js 의 mstring 모듈을 살펴보십시오.

이것은 자바 스크립트에서 여러 줄 문자열을 가질 수있게 해주는 간단한 작은 모듈입니다.

다음과 같이하십시오.

var M = require('mstring')

var mystring = M(function(){/*** Ontario Mining and Forestry Group ***/})

얻기 위해

mystring === "Ontario\nMining and\nForestry\nGroup"

그리고 그게 다야.

작동 방식
Node.js에서 .toString함수 의 메서드를 호출 할 수 있으며 주석을 포함하여 함수 정의의 소스 코드를 제공합니다. 정규식은 주석의 내용을 가져옵니다.

예, 해킹입니다. Dominic Tarr 의 일회용 댓글에서 영감을 얻었습니다 .


참고 : 모듈 (2012/13/11 기준)은 닫기 전에 공백을 허용하지 않으므로 ***/직접 해킹해야합니다.


1
또는 공백 수정을 포함하는 mstring 분기를 사용하십시오. 감사! github.com/davidmurdoch/mstring
Druska 2013-07-23

6

사람들이 여기에 게시 한 것 외에도 현대 자바 스크립트 vms에 가입하는 것보다 연결이 훨씬 빠를 수 있다고 들었습니다. 의미:

var a = 
[ "hey man, this is on a line",
  "and this is on another",
  "and this is on a third"
].join('\n');

다음보다 느립니다.

var a = "hey man, this is on a line\n" + 
        "and this is on another\n" +
        "and this is on a third";    

어떤 경우에는. http://jsperf.com/string-concat-versus-array-join/3

제쳐두고 나는 이것이 Coffeescript 에서 더 매력적인 기능 중 하나라는 것을 발견했습니다 . 그래, 그래, 알아, 싫어하는 사람은 싫어 할거야.

html = '''
       <strong>
         cup of coffeescript
       </strong>
       '''

HTML 스 니펫에 특히 좋습니다. 나는 그것을 사용하는 이유를 말하는 것이 아니라 ecma land :-(.

조롱


1
나를 위해 CoffeeScript에서 유일한 문제는 내가 마지막으로 확인한 Groovy와 동일한 문제입니다. 파일이 변환되는 경우 .coffee.js, 줄 번호가 뒤죽박죽이된다. 나는 CoffeeScript를 시도하지 않았지만 Groovy를 시도했을 때 생성 된 .java파일 을 가져 오지 않고 디버그하는 것이 매우 어렵다는 것을 알았습니다 .
Bryan Field

나는 꽤 큰 프로젝트를 커피로 썼다. 결국 컴파일 된 코드를 살펴 봐야합니다. 그러나 읽기 쉽습니다. imo는 노드 커뮤니티에서 coffeescript에 대해 받아 들일 수없는 오명이 있지만 여러 개의 대규모 프로젝트가 작성되어 있습니다 (zombie.js, pow, riak-js). 나는 현재 내 작은 OSS의 일부를 포팅하고있다. 왜냐하면 사람들이 '오, 커피, 웩'이라고 말하고 도서관을 사용하기 위해 커피를 사용할 필요가 없다는 사실에도 불구하고 즉시 진행하기 때문이다.
Josh

저는 Coffeescript를 싫어합니다. : P하지만, 나는 확실히 '' '문자열 블록의 팬입니다! 또는 ... PHP heredoc 구문.
BMiner 2011

배열 패턴 (join ( '\ n') 사용)은 대부분의 경우 평범한 문자열 연결보다 느립니다.
BMiner 2011

1
IE7 이하를 제외하고는 사실입니다. 그리고 당신은 내가 그것을 말했고 jsperf에 연결했습니다.
Josh



1

수락 된 답변 외에 :

`this is a 
single string`

'이것은 \ n 단일 문자열'로 평가됩니다.

새 줄없이 문자열 보간을 사용하려면 일반 문자열에서와 같이 백 슬래시를 추가하면됩니다.

`this is a \
single string`

=> '이것은 단일 문자열입니다'.

그러나 수동 공백이 필요합니다.

`this is a\
single string`

=> '이것은 단일 문자열입니다'


0

Vanilla Javascipt는 여러 줄 문자열을 지원하지 않습니다. 요즘에는 언어 전처리 기가 실행 가능한 것으로 판명되었습니다.

가장 인기있는 CoffeeScript는이 기능을 가지고 있지만 최소한의 것이 아니라 새로운 언어입니다. Google의 traceur 컴파일러는 언어에 새로운 기능을 수퍼 세트로 추가하지만 여러 줄 문자열이 추가 된 기능 중 하나라고 생각하지 않습니다.

여러 줄 문자열과 몇 가지 다른 기능을 지원하는 자바 스크립트의 최소한의 수퍼 세트를 만들고 싶습니다. 나는 coffeescript에 대한 초기 컴파일러를 작성하기 전에이 작은 언어를 시작했습니다. 이번 여름에 끝낼 계획입니다.

사전 컴파일러가 옵션이 아닌 경우 html의 스크립트 태그에 여러 줄 데이터를 저장하지만 평가되지 않도록 사용자 지정 유형을 제공하는 스크립트 태그 해킹도 있습니다. 그런 다음 나중에 javascript를 사용하여 스크립트 태그의 내용을 추출 할 수 있습니다.

또한 소스 코드의 줄 끝에 \를 넣으면 새 줄이없는 것처럼 무시됩니다. 개행을 원하면 "\ n \"로 줄을 끝내야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.