Javascript 将Minecraft颜色代码转换为HTML

Javascript 将Minecraft颜色代码转换为HTML,javascript,jquery,html,colors,minecraft,Javascript,Jquery,Html,Colors,Minecraft,最近,我试图将Minecraft MOTD转换为纯HTML。Minecraft MOTD是基本文本,用Minecraft颜色代码表示颜色变化 示例:“§d§l关系§8:§6§oO_O§a§l[突变星期一]” 翻译成:Nexus:… 等等。。。因此,基本上,有颜色代码,可以改变文本的颜色,也有格式代码,可以改变文本的格式 现在,因为Minecraft颜色代码没有说明颜色代码的结束位置,所以我不知道如何将其转换为HTML 我做到了一半,用替换所有颜色代码,用替换所有格式代码 但是,这不起作用,因为当

最近,我试图将Minecraft MOTD转换为纯HTML。Minecraft MOTD是基本文本,用Minecraft颜色代码表示颜色变化

示例:“§d§l关系§8:§6§oO_O§a§l[突变星期一]”

翻译成:
Nexus:…

等等。。。因此,基本上,有颜色代码,可以改变文本的颜色,也有格式代码,可以改变文本的格式

现在,因为Minecraft颜色代码没有说明颜色代码的结束位置,所以我不知道如何将其转换为HTML

我做到了一半,用
替换所有颜色代码,用
替换所有格式代码

但是,这不起作用,因为当您在格式化代码之前有一个颜色代码时,它会变成

所以问题是,我该怎么做?查找颜色代码的结束位置,等等

此处提供了Minecraft的颜色代码:

因为我的代码太大,所以我把它发布在JSFIDLE上

到目前为止,我的代码是:(第一个很好,第二个搞砸了。)

这里有一个方法

对其工作原理的简要说明:

  • 它在字符串中查找所有与它们匹配的正则表达式(请参见
    parseStyle
    函数的第一行)
  • 它将这些代码在字符串中的位置的索引推送到一个数组中,并用双精度的
    \x00
    (空字符)替换每个代码,以便处理字符串后面部分中代码的重复(请参见第一个
    ,了解
    循环)
  • 它根据一个代码的开头和另一个代码的开头将字符串拆分为多个部分,这样每个部分都可以使用自己的规则单独设置样式
  • 同样在第二个循环中,字符串被发送到
    applyCode
    函数,该函数在
    styleMap
    的帮助下应用给定给它的代码(通过数组)。此函数为给定的每个字符串创建一个
    span
    元素。如果找到
    k
    规则,它还将应用
    obfuscate
    函数
  • obfuscate
    函数获取字符串,获取其长度,并为字符串中的每个字符生成一个随机字符。它在一个时间间隔内一个字符一个字符地执行此操作。它选择的字符范围可以通过更改
    replaceRand
    函数中的
    randInt
    值来修改
  • 最后,脚本返回一个具有两个属性的对象:一个是
    parsed
    ,它返回一个运行“模糊处理程序”的DOM元素,另一个是
    raw
    ,它将span元素作为HTML字符串返回(它只是
    parsed
    的内部HTML)
要使用它,只需调用
mineParse(string)
,例如:

var result = mineParse('§6Hello');
document.body.appendChild(result.parsed);
现在支持将换行符转换为

标记、
§r
重置代码以及以任何顺序应用的多个代码。

不过,我相信脚本可以进一步简化。另外,我确信它有bug,你可以随意修改它

(函数(){
"严格使用",;
var currId=0,
混淆器={},
alreadyParsed=[],
样式映射={
“§0”:“颜色:#000000”,
“§1”:“颜色:#0000AA”,
“§2”:“颜色:#00AA00”,
“§3”:“颜色:#00AAAA”,
“§4”:“颜色:#AA0000”,
“§5”:“颜色:#AA00AA”,
“§6”:“颜色:#FFAA00”,
“§7”:“颜色:#AAAAA”,
“§8”:“颜色:#555555”,
“§9”:“颜色:#5555FF”,
“§a”:“颜色:#55FF55”,
“§b”:“颜色:#55FFFF”,
“§c”:“颜色:#FF5555”,
“§d”:“颜色:#FF55FF”,
“§e”:“颜色:#FFFF55”,
“§f”:“颜色:#FFFFFF”,
“§l”:“字体大小:粗体”,
“§m”:“文本装饰:线穿过”,
“§n”:“文本装饰:下划线”,
“§o”:“字体样式:斜体”
};
函数混淆(元素、字符串){
var multiMagic,
currNode,
利斯特伦,
野岱;
函数randInt(最小值、最大值){
返回Math.floor(Math.random()*(max-min+1))+min;
}
函数replaceRand(字符串,i){
var randChar=String.fromCharCode(randInt(64,95));
返回string.substr(0,i)+randChar+string.substr(i+1,string.length);
}
函数initMagic(el,str){
var i=0,
obstr=str | | el.innerHTML,
strLen=obstr.length;
如果(!strLen)返回;
模糊器[currId]。推送(
window.setInterval(函数(){
如果(i>=strLen)i=0;
OBSTR=replaceRand(OBSTR,i);
el.innerHTML=obstr;
i++;
}, 0)
);
}
if(string.indexOf(“
”)>-1){ elem.innerHTML=字符串; listLen=elem.childNodes.length; 对于(nodeI=0;nodeI