如何制作自定义bbcode?



我试图创建一个自定义的bbcode与几个标签:粗体,斜体,strike和下划线,就像whatsapp一样。目前,我正在这样做,但不完美:

var bold=/*(.*?)*/gi
var italise=/_(.*?)_/gi
var data='**Bold this* and _italise this_';
data=data. replace(bold,function(m,text){
return '<strong>' + text + '</strong>';
}).replace(italise,function(m,text){
return '<i>' + text + '</i>';
});

这是不优雅的,也不加粗文本如果有* * bold This *,但这个* bold This *工作

和我觉得会有太多的替换思想,如果我可以实现这个使用数组和调用替换一次就像在php。

您可以将函数替换为字符串,并使用$1作为第一个捕获组:

var bold = /*([^*]+)*/gm
var italise = /_([^_]+)_/gm
var data = '*Bold this* and _italise this_'
data = data.replace(bold, '<b>$1</b>').replace(italise, '<i>$1</i>')
console.log(data)
document.write(data)

编辑:为了得到你想要的效果,你需要为它定义一个函数。

String.prototype.replaceMultiple = function () {
let v = this;
[...arguments].forEach(arg => (v = v.replace(arg[0], arg[1])));
return v;
}
let str = '*Bold this* and _italise this_ and **strikethrough** another *bold*   **strikethrough2** and _italic!_'
let newStr = str.replaceMultiple(
[/(?<!*)*([^*]+)*(?!*)/gm, '<b>$1</b>'], // Bold
[/_([^_]+)_/gm, '<i>$1</i>'], // italic,
[/**([^*]+)**/gm, '<s>$1</s>'] // strikethrough
)
console.log(str)
console.log(newStr)

最新更新