2012-04-24 42 views
15

Tôi muốn có văn bản có dấu gạch dưới trong đó.markdown - tôi có thể có dấu gạch dưới w/o thoát chúng và không có dấu gạch ngang đánh dấu?

Nó không phải là mã và vì vậy tôi không muốn sử dụng định dạng mã.

Tôi muốn ngừng đánh dấu coi đó là hướng dẫn để in nghiêng.

Tôi có thể thoát _each_underscore (xem!) Với \ nhưng tôi có tổng cộng là 20 và trông có vẻ xấu xí trong nguồn, khó duy trì và không phải là rất CẦN.

Bất kỳ tùy chọn nào khác?

Trả lời

13

Một số triển khai Markdown – cụ thể là phía máy chủ của Stack Overflow C# version MarkdownSharp (ở đây là optional behavior) và phiên bản JavaScript phía máy khách PageDown, nhưng cũng có nghĩa là GitHub's flavor – đã bị lệch khỏi thông số Markdown vì chính lý do bạn mô tả.

Đối với một số lịch sử về điều này theo như Stack Overflow, hãy xem hai bài đăng trên blog Three Markdown GotchasMarkdown, One Year Later.

Vì đây là một lời chỉ trích thường được tiết lộ về Markdown, có thể có nhiều triển khai hơn khiến hành vi này có thể được người dùng cài đặt hoặc chỉ cần đi với phiên bản nghiêm ngặt hơn. Vì vậy, nó phụ thuộc vào những gì bạn đang thực hiện.

Nếu bạn đang sử dụng cổng dựa trên triển khai Perl gốc của John Gruber (nghĩa là "tấn phiên bản thay thế regex"), bạn sẽ dễ dàng thực hiện thay đổi này. Chức năng liên quan có thể được gọi là _DoItalicsAndBold (phiên bản Perl gốc, Hiển thị/Trang), DoItalicsAndBold (MarkdownSharp), _do_italics_and_bold (python-markdown2) hoặc tương tự.

Nhìn vào PageDown version of that function của chúng tôi cho các biểu thức thông thường khắt khe hơn được sử dụng ở đây trên Stack Overflow:

function _DoItalicsAndBold(text) { 

    // <strong> must go first: 
    text = text.replace(/([\W_]|^)(\*\*|__)(?=\S)([^\r]*?\S[\*_]*)\2([\W_]|$)/g, 
    "$1<strong>$3</strong>$4"); 

    text = text.replace(/([\W_]|^)(\*|_)(?=\S)([^\r\*_]*?\S)\2([\W_]|$)/g, 
    "$1<em>$3</em>$4"); 

    return text; 
} 
Các vấn đề liên quan