Tôi cố gắng để sử dụng regex này (JS):Regex để loại bỏ dòng đa bình luận
/\/\*(.*)\*\//g
Để thay thế
/*
sdandsads
*/
với không có gì.
Nhưng nó không hoạt động! Tại sao? o_O
Tôi cố gắng để sử dụng regex này (JS):Regex để loại bỏ dòng đa bình luận
/\/\*(.*)\*\//g
Để thay thế
/*
sdandsads
*/
với không có gì.
Nhưng nó không hoạt động! Tại sao? o_O
dot bắt tất cả mọi thứ ngoại trừ dòng mới .. (nếu dotall là sai)
do đó, hoặc sử dụng dotall (như đã đề cập trong câu trả lời khác/bình luận này không được hỗ trợ trong javascript, nhưng tôi sẽ để nó ở đây để tham khảo)
/\/\*(.*)\*\//gs
hoặc thêm các ký tự khoảng trắng \s
trong các biểu thức của bạn
/\/\*((\s|.)*?)\*\//g
Alan nêu trong bình luận của ông một buổi biểu diễn xấu từ câu trả lời tôi đã vì vậy sử dụng sau đây thay vì .. (mà dịch để tất cả mọi thứ khoảng trắng và tất cả mọi thứ không khoảng trắng, vì vậy tất cả mọi thứ ..)
/\/\*([\s\S]*?)\*\//g
Hai vấn đề:
[^]
.Giải pháp:
/\/\*[^]*?\*\//g
Ví dụ:
> '/*abc\ncde*/qqq/*iop\n\njj*/'.replace(/\/\*[^]*?\*\//g, '')
qqq
+1, thay đổi để không tham lam .. –
Không hoạt động với các nhận xét lồng nhau. Thử: '/ * abc/* xyz */def/*'. Bản chất không tham lam làm cho nó khớp với bình luận đầu tiên thứ nhất với chú thích cuối cùng, và sau đó chỉ còn lại 'def
Đừng bận tâm, các bình luận lồng nhau không thực sự được cho phép theo cách đó. Cái bên trong sẽ chấm dứt cái bên ngoài. – InfinitiesLoop
Không có s' (single-line) Chế độ 'trong JavaScript, và '(. \ S |)' tòa án thảm khốc quay lui. Cách tiêu chuẩn để so khớp mọi thứ bao gồm cả dòng mới trong JS là '[\ S \ s]'. –
@alan, mọi liên kết về '\ s | .' backtracking? muốn tìm hiểu thêm về nó .. –
Erik Corry đã giải thích rõ điều này tại đây: http://stackoverflow.com/questions/2407870/javascript-regex-hangs-using-v8/2408599#2408599 Để có một cuộc thảo luận tổng quát hơn về việc khắc phục hậu quả thảm khốc , xem http://www.regular-expressions.info/catastrophic.html –