ฉันรู้สึกแย่ที่เขียนคำตอบแยกต่างหากสำหรับเพียงส่วนขยายของคำตอบของ @NateFerreroแต่ฉันไม่รู้สึกว่าการแก้ไขคำตอบของเขานั้นเหมาะสมเช่นกันดังนั้นโปรดโหวตให้ @NateFerrero หากคำตอบนี้มีประโยชน์กับคุณ
tl; dr - สำหรับผู้ที่ต้องการใช้บล็อกความคิดเห็นภายใน heredoc ...
ฉันต้องการ heredocs Javascript เป็นหลักในการจัดเก็บบล็อกของ CSS เช่น
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's heredoc
; ในรูปแบบที่สมบูรณ์:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
และใช้โดยเพิ่มช่องว่างระหว่าง*
และ/
สำหรับบล็อกความคิดเห็น "inner" ดังนี้:
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.
*-/
หากคุณเพิ่งอัปเดต regex อย่างเหมาะสม:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
หรือบางทีคุณอาจต้องการเว้นวรรคตามจำนวนที่กำหนดแทนการเว้นวรรคเดียว?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^