JavaScript のヒアドキュメントのようなものが必要です。これについて何かアイデアはありますか?クロスブラウザ機能が必要です。
私はこれを見つけました:
heredoc = '\
<div>\
<ul>\
<li><a href="#zzz">zzz</a></li>\
</ul>\
</div>';
私はそれが私のために働くと思います。:)
JavaScript のヒアドキュメントのようなものが必要です。これについて何かアイデアはありますか?クロスブラウザ機能が必要です。
私はこれを見つけました:
heredoc = '\
<div>\
<ul>\
<li><a href="#zzz">zzz</a></li>\
</ul>\
</div>';
私はそれが私のために働くと思います。:)
いいえ、残念ながら JavaScript はヒアドキュメントのようなものをサポートしていません。
これはどう:
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 でのみ使用するスクリプトを作成しているので、使用しています! クライアント向けの Web サイトでは、これに頼らないでください。
// 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 プロトタイプをまったく混乱させず、代わりにヒアドキュメントという名前を使用するように変更しました。
2017 年 5 月 26 日 - 最新のコーディング標準を反映するように空白を更新しました。
実行している JS/JS エンジンのフレーバー (SpiderMonkey、AS3) に応じて、インライン XML を簡単に記述できます。この XML には、ヒアドキュメントのように複数行にテキストを配置できます。
var xml = <xml>
Here
is
some
multiline
text!
</xml>
console.log(xml.toXMLString())
console.log(xml.toString()) // just gets the content
ES6テンプレート文字列にはヒアドキュメント機能があります。
バックティック (` `) で囲まれた文字列を宣言でき、複数行に展開できます。
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
JavaScript にコンパイルされる言語であるCoffeeScriptを使用できます。コードは 1 対 1 で同等の JS にコンパイルされ、実行時に解釈されません。
そしてもちろん、ヒアドキュメントがあります:)
この投稿で Tim Disney によって作成されたように、Sweet.js マクロを使用して追加できます。
このアプローチでは、代わりにバッククォートを文字列区切り記号として使用することに注意してください。
let str = macro {
case {_ $template } => {
var temp = #{$template}[0];
var tempString = temp.token.value.raw;
letstx $newTemp = [makeValue(tempString, #{here})];
return #{$newTemp}
}
}
str `foo bar baz`
手元に html と jQuery があり、文字列が有効な HTML である場合、これが役立つ場合があります。
<div id="heredoc"><!--heredoc content
with multiple lines, even 'quotes' or "double quotes",
beware not to leave any tag open--></div>
<script>
var str = (function() {
var div = jQuery('#heredoc');
var str = div.html();
str = str.replace(/^<\!--/, "").toString();
str = str.replace(/-->$/, "").toString();
return str;
})();
</script>
テキスト間にコメント「<!-- -->」が含まれていても機能しますが、テキストの一部が表示される場合があります。これがフィドルです:https://jsfiddle.net/hr6ar152/1/