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+""+htmltag+">"; } 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 () {