我试图使自己的降价,能像文本区域已经#1完成。 目标是让人们键入**blah blah**
在一个textarea和具有在一个div输出是<span style="font-weight:bold;">blah blah</span>
。
我在使用JavaScript的麻烦查找和替换与HTML的**星号。
这里是它已经得到了甲方的jsfiddle开始: http://jsfiddle.net/trpeters1/2LAL4/14/
这里是上了JS只是为了告诉你我在哪里:
$(document.body).on('click', 'button', function() {
var val=$('textarea').val();
var bolded=val.replace(/\**[A-z][0-9]**/gi, '<span style="font-weight:bold;">"'+val+'" </span>');
$('div').html(bolded);
});
与HTML ...
<textarea></textarea>
<div></div><button type="button">Markdownify</button>
任何想法将不胜感激!
谢谢,蒂姆
你的正则表达式是坏了,一两件事。 你可能想要的东西更像是:
/\*\*[A-z0-9]+\*\*/gi
该*
是正则表达式中一个特殊字符。 如果你要匹配的文字*
,那么你需要进行转义\
。
例如: http://jsfiddle.net/2LAL4/22/
然而,即使这种变化还是有一个公平的方式,你得到你真正想要的是之前去。 举例来说,如果文本区域包含粗体和非粗体文字的搭配你的榜样将无法工作。
当一个char立即之前或之后的星号其他答案失败。
这就像降价应该:
function boldText(text){
var bold = /\*\*(\S(.*?\S)?)\*\*/gm;
var html = text.replace(bold, '<strong>$1</strong>');
return html;
}
alert(boldText('te**st**ing'));
见的jsfiddle
为什么要从头开始创建? 有了这么多的开源编辑器在那里,你应该选择一个你喜欢的代码库和从那里走。 http://oscargodson.github.com/EpicEditor/ http://markitup.jaysalvat.com/home/
所提供的答案都不适用于所有情况。 例如,其他的解决方案不会工作,如果我们有旁边的双星,即空间:
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标签,只要你喜欢使用它(计算器预览应该有这个太)。
如果您在使用jQuery,替换此:
$(document.body).on('click', 'button', function() {
有了这个:
$("button").click(function () {
下面的正则表达式会发现你的星号包裹的文字:
/\x2a\x2a[A-z0-9]+\x2a\x2a/
我更新了小提琴为例: http://jsfiddle.net/2LAL4/30/