Ruby에는 다음 코드가 있습니다. 이 코드를 JavaScript로 변환하고 싶습니다. JS의 동등한 코드는 무엇입니까?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
답변
최신 정보:
ECMAScript 6 (ES6)에는 새로운 유형의 리터럴, 즉 템플릿 리터럴이 도입되었습니다 . 그것들은 다른 많은 것들과 다양한 보간법을 가지고 있지만, 가장 중요한 것은이 질문에 대해 여러 줄이 될 수 있습니다.
템플릿 리터럴은 백틱 으로 구분됩니다 .
var html = `
<div>
<span>Some HTML here</span>
</div>
`;
(참고 : 문자열에서 HTML을 사용하는 것을 옹호하지 않습니다)
브라우저 지원은 가능 하지만 트랜스 파일러 를 사용 하여 호환성을 높일 수 있습니다.
원래 ES5 답변 :
Javascript에는 here-document 구문이 없습니다. 그러나 리터럴 개행을 피할 수 있습니다.
"foo \
bar"
답변
ES6 업데이트 :
첫 번째 답변에서 언급했듯이 ES6 / Babel을 사용하면 백틱을 사용하여 여러 줄 문자열을 만들 수 있습니다.
const htmlString = `Say hello to
multi-line
strings!`;
보간 변수는 백틱으로 구분 된 문자열과 함께 제공되는 인기있는 새로운 기능입니다.
const htmlString = `${user.name} liked your post about strings`;
이것은 단지 연결로 변환됩니다.
user.name + ' liked your post about strings'
원래 ES5 답변 :
Google의 JavaScript 스타일 가이드 는 줄 바꿈을 피하는 대신 문자열 연결을 사용하는 것이 좋습니다.
이 작업을 수행하지 마십시오 :
var myString = 'A rather long string of English text, an error message \ actually that just keeps going and going -- an error \ message to make the Energizer bunny blush (right through \ those Schwarzenegger shades)! Where was I? Oh yes, \ you\'ve got an error and all the extraneous whitespace is \ just gravy. Have a nice day.';
각 줄의 시작 부분에있는 공백은 컴파일 타임에 안전하게 제거 할 수 없습니다. 슬래시 뒤에 공백이 있으면 까다로운 오류가 발생합니다. 대부분의 스크립트 엔진이이를 지원하지만 ECMAScript의 일부는 아닙니다.
대신 문자열 연결을 사용하십시오.
var myString = 'A rather long string of English text, an error message ' + 'actually that just keeps going and going -- an error ' + 'message to make the Energizer bunny blush (right through ' + 'those Schwarzenegger shades)! Where was I? Oh yes, ' + 'you\'ve got an error and all the extraneous whitespace is ' + 'just gravy. Have a nice day.';
답변
패턴 text = <<"HERE" This Is A Multiline String HERE
js 사용할 수 없습니다 (좋은 펄 시절에 많이 사용하는 것을 기억합니다).
복잡하거나 긴 여러 줄 문자열을 감독하기 위해 때때로 배열 패턴을 사용합니다.
var myString =
['<div id="someId">',
'some content<br />',
'<a href="#someRef">someRefTxt</a>',
'</div>'
].join('\n');
또는 익명으로 이미 표시된 패턴 (줄 바꿈 이스케이프)은 코드에서 못생긴 블록 일 수 있습니다.
var myString =
'<div id="someId"> \
some content<br /> \
<a href="#someRef">someRefTxt</a> \
</div>';
또 다른 이상하지만 작동하는 ‘트릭’ 1이 있습니다 .
var myString = (function () {/*
<div id="someId">
some content<br />
<a href="#someRef">someRefTxt</a>
</div>
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
외부 편집 : jsfiddle
ES20xx 는 템플릿 문자열을 사용하여 여러 줄에 걸친 문자열을 지원합니다 .
let str = `This is a text
with multiple lines.
Escapes are interpreted,
\n is a newline.`;
let str = String.raw`This is a text
with multiple lines.
Escapes are not interpreted,
\n is not a newline.`;
1 참고 : 코드 축소 / 난독 화 후에는 손실됩니다
답변
당신 은 할 수 있습니다순수한 JavaScript로 여러 줄 문자열을 가질 .
이 방법은 구현에 따라 정의 된 함수의 직렬화를 기반으로합니다 . 대부분의 브라우저에서 작동하지만 (아래 참조) 앞으로도 계속 작동 할 것이라는 보장이 없으므로 의존하지 마십시오.
다음 기능 사용 :
function hereDoc(f) {
return f.toString().
replace(/^[^\/]+\/\*!?/, '').
replace(/\*\/[^\/]+$/, '');
}
다음과 같은 문서를 가질 수 있습니다.
var tennysonQuote = hereDoc(function() {/*!
Theirs not to make reply,
Theirs not to reason why,
Theirs but to do and die
*/});
이 방법은 다음 브라우저에서 성공적으로 테스트되었습니다 (언급되지 않음 = 테스트되지 않음).
- IE 4-10
- 오페라 9.50-12 (9가 아님)
- Safari 4-6 (3 아님)
- 크롬 1-45
- Firefox 17-21 ( 16-이 아닌 )
- Rekonq 0.7.0-0.8.0
- Konqueror 4.7.4에서 지원되지 않습니다
그래도 축소기를 조심하십시오. 주석을 제거하는 경향이 있습니다. 를 들어 YUI 압축기 , 코멘트로 시작/*!
보존됩니다 (내가 사용하는 것과 같은).
실제 해결책은 CoffeeScript 를 사용하는 것이라고 생각합니다 .
ES6 업데이트 : 주석이있는 함수를 만들고 주석에서 toString을 실행하는 대신 backtick를 사용할 수 있습니다. 공간을 제거하기 위해 정규식을 업데이트해야합니다. 이를 위해 문자열 프로토 타입 방법을 사용할 수도 있습니다.
let foo = `
bar loves cake
baz loves beer
beer loves people
`.removeIndentation()
멋지다. 누군가이 .removeIndentation 문자열 메소드를 작성해야합니다 …;)
답변
당신은 이것을 할 수 있습니다 …
var string = 'This is\n' +
'a multiline\n' +
'string';
답변
나는 다중 줄 문자열의이 지 미식 리깅 방법을 생각해 냈습니다. 함수를 문자열로 변환하면 함수 내부의 주석도 반환되므로 여러 줄 주석 / ** /를 사용하여 주석을 문자열로 사용할 수 있습니다. 끝을 다듬어야하고 줄이 있습니다.
var myString = function(){/*
This is some
awesome multi-lined
string using a comment
inside a function
returned as a string.
Enjoy the jimmy rigged code.
*/}.toString().slice(14,-3)
alert(myString)
답변
나는 그것을 보지 못한 것에 놀랐다. 왜냐하면 그것이 테스트 한 모든 곳에서 작동하기 때문에 템플릿과 같이 매우 유용하다.
<script type="bogus" id="multi">
My
multiline
string
</script>
<script>
alert($('#multi').html());
</script>
HTML이 있지만 작동하지 않는 환경을 아는 사람이 있습니까?