자바스크립트는 문자열 할당시 여러라인으로 나눌 수가 없다.
// 그래서 이런 뻘짓을 해야함
var s = '' +
'<!doctype html>' +
'<html>' +
' <body>BODY</body>' +
'</html>';
예전부터 이걸 어떻게 하는 방법이 없을까 하고 생각했지만 뾰족한 방법을 찾지를 못했는데,
얼마전 node.js 모듈 중에 하나 찾게 되었다.
multiline이란 모듈
https://github.com/sindresorhus/multiline
핵심은,
콜백함수로 받은 함수를 toString()을 사용하여 문자열로 변환한 다음, 함수내용 중 주석으로 넣은 문자열을 정규식으로 추출해내는 것이다.
// 주석 내부의 문자열을 추출할 정규식
var reCommentContents = /\/\*!?(?:\@preserve)?[ \t]*(?:\r\n|\n)([\s\S]*?)(?:\r\n|\n)\s*\*\//;
// 콜백함수로 받은 함수의 내용 중 주석 내부의 문자열을 추출하여 반환
var multiline = function(fn)
{
if (typeof fn !== 'function') {
throw new TypeError('Expected a function.');
}
var match = reCommentContents.exec(fn.toString());
if (!match) {
throw new TypeError('Multiline comment missing.');
}
return match[1];
}
// 이렇게 쓴다
var s = multiline(function(){/*
<!doctype html>
<html>
<body>BODY</body>
</html>
*/});
물론 당연히 퍼포먼스 면에선 손실이 생기겠으나,
그 발상의 신선함이 마음에 들어서 따로 남긴다.
(그리고 실행시의 퍼포먼스에 더불어 키보드 치는 손가락의 퍼포먼스도 나름 중요하다고 생각하므로...)
'JavaScript' 카테고리의 다른 글
[JavaScript] cross-domain localStorage (0) | 2014.04.17 |
---|---|
[JavaScript] 부동소수점 비교연산 (floating point math) (0) | 2014.04.08 |
[JavaScript] jQuery - 전체 document의 element 다 가져오기 (select, top.document, element) (0) | 2014.01.07 |
[JavaScript] 날짜를 YYYYmmdd 형태로 반환하는 함수 (Date, format, yyyymmdd) (4) | 2013.12.20 |
[JavaScript] 정수 범위지정 랜덤 (range, random) (1) | 2013.01.31 |