Tôi cảm thấy không ổn khi viết một câu trả lời riêng chỉ đơn thuần là một phần mở rộng cho câu trả lời của @ NateFerrero , nhưng tôi cảm thấy việc chỉnh sửa câu trả lời của anh ấy cũng không phù hợp, vì vậy vui lòng ủng hộ @NateFerrero nếu câu trả lời này hữu ích với bạn.
tl; dr — Dành cho những người muốn sử dụng nhận xét khối bên trong heredoc của họ ...
Tôi chủ yếu cần heredocs Javascript để lưu trữ một khối CSS, ví dụ:
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;
}
*/});
Tuy nhiên, như bạn có thể thấy, tôi thích nhận xét CSS của mình, và thật không may (như được gợi ý bởi tô sáng cú pháp) phần đầu tiên */
kết thúc nhận xét tổng thể, phá vỡ heredoc.
Đối với mục đích cụ thể này (CSS), cách giải quyết của tôi là thêm
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
vào chuỗi bên trong @ NateFerrero's heredoc
; ở dạng hoàn chỉnh:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
và sử dụng nó bằng cách thêm một khoảng trắng giữa *
và /
cho các nhận xét khối "bên trong", như sau:
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;
}
*/});
Đơn replace
giản là tìm /* ... * /
và loại bỏ không gian để tạo /* ... */
, do đó bảo toàn heredoc cho đến khi được gọi.
Tất nhiên, bạn có thể xóa hoàn toàn các nhận xét bằng cách sử dụng
.replace(/\/\*[\s\S]*?\* \//g, '')
Bạn cũng có thể hỗ trợ //
nhận xét nếu bạn thêm chúng vào chuỗi:
.replace(/^\s*\/\/.*$/mg, '')
Ngoài ra, bạn có thể làm điều gì đó ngoài khoảng trắng duy nhất giữa *
và /
, chẳng hạn như -
:
/**
* Nuke rounded corners.
*-/
nếu bạn chỉ cập nhật regex một cách thích hợp:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
Hoặc có thể bạn muốn một lượng khoảng trắng tùy ý thay vì một khoảng trắng?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^