Saya merasa tidak enak menulis jawaban terpisah hanya untuk perpanjangan dari jawaban @ NateFerrero , tetapi saya juga merasa mengedit jawabannya juga tidak sesuai, jadi tolong upvote @NateFerrero jika jawaban ini bermanfaat bagi Anda.
tl; dr — Bagi mereka yang ingin menggunakan komentar blokir di dalam heredoc ...
Saya terutama membutuhkan Javascript heredocs untuk menyimpan satu blok CSS, misalnya
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;
}
*/});
Namun seperti yang Anda lihat, saya suka mengomentari CSS saya, dan sayangnya (seperti yang diisyaratkan oleh penyorotan sintaks) yang pertama */
mengakhiri keseluruhan komentar, melanggar heredoc.
Untuk tujuan khusus ini (CSS), solusi saya adalah menambahkan
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
ke rantai di dalam @ NateFerrero heredoc
; dalam bentuk lengkap:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
dan menggunakannya dengan menambahkan spasi di antara *
dan /
untuk komentar blok "dalam", seperti:
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;
}
*/});
Yang replace
sederhana menemukan /* ... * /
dan menghilangkan ruang untuk dibuat /* ... */
, dengan demikian melestarikan heredoc sampai dipanggil.
Anda tentu saja dapat menghapus semua komentar menggunakan
.replace(/\/\*[\s\S]*?\* \//g, '')
Anda juga dapat mendukung //
komentar jika Anda menambahkannya ke rantai:
.replace(/^\s*\/\/.*$/mg, '')
Selain itu, Anda dapat melakukan sesuatu selain spasi tunggal antara *
dan /
, seperti -
:
/**
* Nuke rounded corners.
*-/
jika Anda hanya memperbarui regex dengan benar:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
Atau mungkin Anda menginginkan jumlah spasi yang berubah-ubah alih-alih satu spasi?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^