JavaScript에서 heredoc과 같은 것이 필요합니다. 이것에 대한 아이디어가 있습니까? 브라우저 간 기능이 필요합니다.
나는 이것을 찾았다:
heredoc = '\
<div>\
<ul>\
<li><a href="#zzz">zzz</a></li>\
</ul>\
</div>';
나는 그것이 나를 위해 일할 것이라고 생각합니다. 🙂
답변
시도 ES6 문자열 템플릿 , 당신은 뭔가를 할 수 있습니다
var hereDoc = `
This
is
a
Multiple
Line
String
`.trim()
hereDoc == 'This\nis\na\nMultiple\nLine\nString'
=> true
답변
아니요, 안타깝게도 JavaScript는 heredoc과 같은 것을 지원하지 않습니다.
답변
이건 어때요:
function MyHereDoc(){
/*HERE
<div>
<p>
This is written in the HEREDOC, notice the multilines :D.
</p>
<p>
HERE
</p>
<p>
And Here
</p>
</div>
HERE*/
var here = "HERE";
var reobj = new RegExp("/\\*"+here+"\\n[\\s\\S]*?\\n"+here+"\\*/", "m");
str = reobj.exec(MyHereDoc).toString();
str = str.replace(new RegExp("/\\*"+here+"\\n",'m'),'').toString();
return str.replace(new RegExp("\\n"+here+"\\*/",'m'),'').toString();
}
//Usage
document.write(MyHereDoc());
“/ * HERE”및 “HERE * /”를 선택한 단어로 바꾸십시오.
답변
Zv_oDD의 답변을 바탕으로 쉽게 재사용 할 수 있도록 유사한 기능을 만들었습니다.
경고 : 이것은 많은 JS 인터프리터의 비표준 기능이며 언젠가는 제거 될 것입니다.하지만 Chrome에서만 사용할 스크립트를 빌드 할 때 사용하고 있습니다! 클라이언트를 향한 웹 사이트를 위해 절대로 이것에 의존 하지 마십시오 !
// Multiline Function String - Nate Ferrero - Public Domain
function heredoc(fn) {
return fn.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1];
};
사용하다:
var txt = heredoc(function () {/*
A test of horrible
Multi-line strings!
*/});
보고:
"A test of horrible
Multi-line strings!"
노트:
- 텍스트는 양쪽 끝이 잘 리므로 양쪽 끝의 추가 공백은 괜찮습니다.
편집 :
2014 년 2 월 2 일-Function 프로토 타입을 전혀 엉망으로 만들지 않고 heredoc라는 이름을 대신 사용하도록 변경되었습니다.
2017 년 5 월 26 일-최신 코딩 표준을 반영하기 위해 공백이 업데이트되었습니다.
답변
실행중인 JS / JS 엔진 (SpiderMonkey, AS3)의 종류에 따라 heredoc과 같이 여러 줄에 텍스트를 배치 할 수있는 인라인 XML을 간단히 작성할 수 있습니다.
var xml = <xml>
Here
is
some
multiline
text!
</xml>
console.log(xml.toXMLString())
console.log(xml.toString()) // just gets the content
답변
ES6 템플릿 문자열 에는 heredoc 기능이 있습니다.
역틱 (“)으로 묶인 문자열을 선언 할 수 있으며 여러 줄로 확장 할 수 있습니다.
var str = `This is my template string...
and is working across lines`;
템플릿 문자열 내에 표현식을 포함 할 수도 있습니다. 이들은 달러 기호와 중괄호 ( ${expression}
)로 표시됩니다.
var js = "Java Script";
var des = `Template strings can now be used in ${js} with lot of additional features`;
console.log(des); //"Template strings can now be used in Java Script with lot of additional features"
실제로 Tagged Temple Strings 및 Raw Strings와 같은 더 많은 기능이 있습니다. 설명서를 찾으십시오.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings
답변
@NateFerrero의 답변에 대한 확장에 대한 별도의 답변을 작성하는 것이 좋지 않습니다. 않지만 그의 답변을 편집하는 것도 적절하다고 생각하지 않으므로이 답변이 유용하다면 @NateFerrero를 찬성하십시오.
tl; dr- heredoc 내에서 블록 주석을 사용하려는 사람들을 위해 …
나는 주로 CSS의 블록 저장하기 위해 자바 스크립트 heredocs 필요 예를
var css = heredoc(function() {/*
/**
* Nuke rounded corners.
*/
body div {
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
*/});
그러나 보시다시피 CSS에 주석을 달고 싶습니다. 불행히도 (구문 강조 표시에서 알 수 있듯이) 첫 번째 */
는 전체 주석을 끝내고 heredoc을 깨뜨립니다.
이 특정 목적 (CSS)의 경우 해결 방법은
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
@NateFerrero의 내부 체인에 heredoc
; 완전한 형태 :
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
다음과 같이 “내부”블록 주석을 위해 *
와 사이에 공백을 추가하여 사용합니다 /
.
var css = heredoc(function() {/*
/**
* Nuke rounded corners.
* /
body div {
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
*/});
는 replace
단순히 /* ... * /
만들 공간을 찾아서 제거하여 /* ... */
호출 될 때까지 heredoc을 보존합니다.
물론 다음을 사용하여 주석을 모두 제거 할 수 있습니다.
.replace(/\/\*[\s\S]*?\* \//g, '')
//
주석을 체인에 추가하는 경우 에도 지원할 수 있습니다 .
.replace(/^\s*\/\/.*$/mg, '')
또한 다음 *
과 /
같이 와 사이의 단일 공백 이외의 다른 작업을 수행 할 수 있습니다 -
.
/**
* Nuke rounded corners.
*-/
정규식을 적절하게 업데이트하는 경우 :
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
아니면 단일 공백 대신 임의의 양의 공백을 원하십니까?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^