【发布时间】:2015-01-25 18:00:10
【问题描述】:
我开发了couleurs NPM package,可以设置将rgb方法附加到String.prototype:
> console.log("Hello World!".rgb(255, 0, 0)) // "Hello World!" in red
Hello World!
undefined
> "Hello World!".rgb(255, 0, 0)
'\u001b[38;5;196mHello World!\u001b[0m'
这很好用。在索引i 处获取字符的 ANSI 颜色/样式的正确方法是什么?
这可能会被一些正则表达式破解,但我不确定这是否真的很好(但是,如果有正确的实现,我不反对)......我更喜欢原生方式通过访问由 tty 解释的字符来获取颜色/样式。
> function getStyle (input, i) { /* get style at index `i` */ return style; }
> getStyle("Hello World!".rgb(255, 0, 0), 0); // Get style of the first char
{
start: "\u001b[38;5;196m",
end: "\u001b[0m",
char: "H"
}
> getStyle("Hello " + "World!".rgb(255, 0, 0), 0); // Get style of the first char
{
start: "",
end: "",
char: "H"
}
当我们有多种组合样式时,事情会变得复杂:
> console.log("Green and Italic".rgb(0, 255, 0).italic())
Green and Italic
undefined
> getStyle("Green and Italic".rgb(0, 255, 0).italic(), 0);
{
start: "\u001b[3m\u001b[38;5;46m",
end: "\u001b[0m\u001b[23m",
char: "G"
}
> getStyle(("Bold & Red".bold() + " but this one is only red").rgb(255, 0, 0), 0);
{
start: "\u001b[38;5;196m\u001b[1m",
end: "\u001b[22m\u001b[0m",
char: "B"
}
> getStyle(("Bold & Red".bold() + " but this one is only red").rgb(255, 0, 0), 11);
{
start: "\u001b[38;5;196m",
end: "\u001b[0m",
char: "u"
}
> ("Bold & Red".bold() + " but this one is only red").rgb(255, 0, 0)
'\u001b[38;5;196m\u001b[1mBold & Red\u001b[22m but this one is only red\u001b[0m'
就像我说的,我正在寻找一种原生方式(可能使用子进程)。
那么,如何获得索引i处字符的完整ANSI样式?
【问题讨论】:
标签: javascript regex node.js ansi-colors