2010-09-10 50 views
7

Tôi hy vọng rằng ai đó có thể giúp tôi. Tôi không chắc chắn làm thế nào để sử dụng regex sau đây. Tôi đang sử dụng ASP cổ điển với JavascriptRegex xóa ngắt dòng

completehtml = completehtml.replace(/\<\!-- start-code-remove --\>.*?\<\!-- start-code-end --\>/ig, ''); 

tôi có mã này để loại bỏ tất cả mọi thứ giữa

<\!-- start-code-remove --\><\!-- start-code-end --\>

Nó hoạt động hoàn hảo lên đến điểm mà tại đó là line breaks trong các giá trị giữa startend mã ...

Làm thế nào tôi sẽ viết regex để loại bỏ tất cả mọi thứ giữa startend thậm chí nếu có line breaks

Nhờ một triệu để đáp ứng ...

tôi shoud sử dụng \n\s ký tự không chắc chắn 100% ..

(/\<\!-- start-code-remove --\>\s\n.*?\s\n\<\!-- start-code-end --\>/ig, ''); 

cũng mã không nên tham lam giữa <\!-- start-code-remove --\> <\!-- start-code-end --\>/ và nắm bắt được giá trị trong nhóm ...

Có thể có 3 hoặc nhiều bộ này ...

Trả lời

6

Dấu chấm không khớp với dòng mới trong Javascript, cũng không có công cụ sửa đổi để làm điều đó (không giống như trong hầu hết các công cụ regex hiện đại). Một công việc phổ biến là sử dụng lớp nhân vật này thay cho dấu chấm: [\s\S]. Vì vậy, regex của bạn sẽ trở thành:

completehtml = completehtml.replace(
    /\<\!-- start-code-remove --\>[\s\S]*?\<\!-- start-code-end --\>/ig, ''); 
3

Hãy thử (.|\n|\r)*.

completehtml = completehtml.replace(/\<\!-- start-code-remove --\>(.|\n|\r)*?\<\!-- start-code-end --\>/ig, ''); 
+0

Sẽ không '[. \ N \ r] *' trở nên tốt hơn? –

+0

@Billy, Đã thử. Đã không làm việc cho tôi vì một lý do nào đó. – RightSaidFred

+2

Ah .. bây giờ tôi hiểu tại sao. '.' không được công nhận là một siêu ký tự trong các lớp ký tự. –

2

Source

Có thực sự là không có/s sửa đổi để làm cho dot trận đấu tất cả các nhân vật, bao gồm ngắt dòng. Để khớp hoàn toàn bất kỳ ký tự nào, bạn có thể sử dụng lớp ký tự chứa lớp viết tắt và phiên bản phủ định của nó, chẳng hạn như [\ s \ S].

+0

Cảm ơn Billy Đánh giá cao câu trả lời của bạn ... Tôi đã đi cho câu trả lời dưới đây, vì nó có toàn bộ mã được viết ra, nhưng tôi thực sự đánh giá cao đầu vào –

0

Hỗ trợ Regex trong javascript không đáng tin cậy lắm.

function remove_tag_from_text(text, begin_tag, end_tag) { 
    var tmp = text.split(begin_tag); 
    while(tmp.length > 1) { 
     var before = tmp.shift(); 
     var after = tmp.join(begin_tag).split(end_tag); 
     after.shift(); 
     text = before + after.join(end_tag); 
     tmp = text.split(begin_tag); 
    } 
    return text; 
} 
+1

Errr .. Tôi không biết chính xác điều gì là không đáng tin cậy. Quan trọng hơn, tôi không biết lý do tại sao bạn sẽ thực hiện loại điều này về phân chia và tham gia - đó là khủng khiếp xấu. –

+0

Hi Paulo cảm ơn phản hồi - mã của tôi được định dạng đúng vì vậy tôi không sợ rằng javascript có thể bị hỏng nhưng nhờ mẹo –

+0

@Billy: Không phải tất cả thuộc tính đối tượng RegExp đều được hỗ trợ trên các nhãn hiệu và phiên bản trình duyệt khác nhau. Split/Tham gia các thủ đoạn rất xấu nhưng thực hiện rất tốt. –

Các vấn đề liên quan