Markdown将双星号转换为javascript中的粗体文本

我正在尝试像Stackoverflow那样制作我自己的可降价的textarea。 目标是允许人们在textarea中键入**blah blah**并将div中的输出设为blah blah

我正在使用javascript来查找并用HTML替换**星号。

这是一个让聚会开始的jsfiddle: http : //jsfiddle.net/trpeters1/2LAL4/14/

这里的JS就是为了告诉你我在哪里:

 $(document.body).on('click', 'button', function() { var val=$('textarea').val(); var bolded=val.replace(/\**[Az][0-9]**/gi, '"'+val+'" '); $('div').html(bolded); }); 

和HTML …

  

任何想法将不胜感激!

谢谢,蒂姆

一方面,你的正则表达式被打破了。 你可能想要更像的东西:

 /\*\*[A-z0-9]+\*\*/gi 

*是正则表达式中的特殊字符。 如果你想匹配文字* ,那么你需要用\来转义它。

例如: http : //jsfiddle.net/2LAL4/22/

然而,即使有这种变化,在你到达你真正想要的地方之前还有一个公平的方法。 例如,如果文本区域包含粗体和非粗体文本的混合,则您的示例将不起作用。

当字母紧跟在星号之前或之后,其他答案都会失败。

这有点像降价应该:

 function boldText(text){ var bold = /\*\*(\S(.*?\S)?)\*\*/gm; var html = text.replace(bold, '$1'); return html; } alert(boldText('te**st**ing')); 

见JSFiddle

为什么从头开始创作? 有这么多的开源编辑器,你应该选择你喜欢的代码库并从那里开始。 http://oscargodson.github.com/EpicEditor/ http://markitup.jaysalvat.com/home/

以下正则表达式将找到您的星号包装文本:

/\x2a\x2a[A-z0-9]+\x2a\x2a/

我更新你的小提琴作为一个例子: http : //jsfiddle.net/2LAL4/30/

所有提供的答案都不适用于所有情况。 例如,如果我们在双星旁边有一个空格,其他解决方案就不会起作用,即:

 This will ** not ** be bold 

所以我写了这个:

 function markuptext(text,identifier,htmltag) { var array = text.split(identifier); var previous = ""; var previous_i; for (i = 0; i < array.length; i++) { if (i % 2) { //odd number } else if (i!=0) { previous_i = eval(i-1); array[previous_i] = "<"+htmltag+">"+previous+""; } previous = array[i]; } var newtext = ""; for (i = 0; i < array.length; i++) { newtext += array[i]; } return newtext; } 

只需将其称为:

 thetext = markuptext(thetext,"**","strong"); 

它适用于所有情况。 当然,您也可以根据需要将其与其他标识符/ html标记一起使用(stackoverflow预览也应该具有此function)。

如果您使用的是jQuery,请将其替换为:

 $(document.body).on('click', 'button', function() { 

有了这个:

 $("button").click(function () {