تعبير عادي لتحويل العلامة إلى HTML
سؤال
كيف تكتب تعبيرًا عاديًا لتحويل العلامة إلى HTML؟على سبيل المثال، ستكتب ما يلي:
This would be *italicized* text and this would be **bold** text
سيتعين بعد ذلك تحويل هذا إلى:
This would be <em>italicized</em> text and this would be <strong>bold</strong> text
يشبه إلى حد كبير عنصر التحكم في التحرير الذي يستخدمه Stackoverflow.
إيضاح
لما يستحق الأمر، أنا أستخدم C#.أيضاً، هذه هي فقط العلامات الحقيقية/تخفيض السعر الذي أريد السماح به.سيكون مقدار النص الذي يتم تحويله أقل من 300 حرف أو نحو ذلك.
المحلول
أفضل طريقة هي العثور على نسخة من مكتبة Markdown منقولة إلى أي لغة تستخدمها (لم تحددها في سؤالك).
الآن بعد أن أوضحت أنك تريد فقط معالجة STRONG وEM، وأنك تستخدم C#، أنصحك بإلقاء نظرة على تخفيض السعر.NET لمعرفة كيفية تنفيذ هذه العلامات.كما ترون، فهو في الواقع تعبيران.هنا هو الرمز:
private string DoItalicsAndBold (string text)
{
// <strong> must go first:
text = Regex.Replace (text, @"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1",
new MatchEvaluator (BoldEvaluator),
RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
// Then <em>:
text = Regex.Replace (text, @"(\*|_) (?=\S) (.+?) (?<=\S) \1",
new MatchEvaluator (ItalicsEvaluator),
RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
return text;
}
private string ItalicsEvaluator (Match match)
{
return string.Format ("<em>{0}</em>", match.Groups[2].Value);
}
private string BoldEvaluator (Match match)
{
return string.Format ("<strong>{0}</strong>", match.Groups[2].Value);
}
نصائح أخرى
تعبير عادي واحد لن يفعل.سيكون لكل ترميز نصي مترجم HTML خاص به.انظر بشكل أفضل إلى كيفية تنفيذ المحولات الحالية للحصول على فكرة عن كيفية عملها.
لا أعرف شيئًا عن C# على وجه التحديد، ولكن في لغة Perl سيكون:
س/
\*\*(.*?)\*\*/
\< بولد>$1\</bold>/ز
س/
\*(.*?)\*/
\< em>$1\</em>/g