如何在 JQuery 终端中为包含反斜杠 (\) 的文本着色?
How do I color text in JQuery Terminal that contains a backslash (\)?
我一直在关注 以帮助我更改 JQuery 终端中输出的颜色,尽管该方法似乎不适用于反斜杠。
理想情况下,我希望能够用一种颜色(即红色)突出显示某些文本,而文本的其余部分是白色以外的其他颜色(即蓝绿色)。文本经常使用反斜杠,这会导致一些否则不会存在的错误。
下面是一个可重现的示例:
function highlight_all_occurences_of_x_in_text(text) {
text_list = text.split("");
output_list = [];
while (text_list.length > 0) {
current_character = text_list.shift();
if (current_character === 'x') {
output_list.push('[[gb;red;black]');
output_list.push('x');
output_list.push(']');
}
else {
output_list.push(current_character);
}
}
return '[[gb;yellow;black]' + output_list.join('') + ']';
}
如果我调用 highlight_all_occurences_of_x_in_text('\text') 甚至 highlight_all_occurences_of_x_in_text('\\text'),我会得到预期的输出。
但是如果我调用 highlight_all_occurences_of_x_in_text('\\x'),我会得到类似 '][[gb;red;blackx]' 的结果。
我该如何处理?
解决方法是使用
$.terminal.escape_brackets
或
$.terminal.escape_formatting
这两个函数都将 [ ] \
替换为 HTML 个实体。
发生这种情况的原因是 \]
是一个转义括号,如果您有 [[;yellow;]\]
终端将不会关闭格式并继续将其余部分作为文本的一部分处理,如果在那之后发生事件是另一种格式。
function highlight_all_occurences_of_x_in_text(text) {
var text_list = text.split("");
var output_list = [];
while (text_list.length > 0) {
current_character = text_list.shift();
if (current_character === 'x') {
output_list.push('[[gb;red;black]');
output_list.push('x');
output_list.push(']');
} else {
var str = $.terminal.escape_formatting(current_character);
output_list.push(str);
}
}
return '[[gb;yellow;black]' + output_list.join('') + ']';
}
var term = $('body').terminal(highlight_all_occurences_of_x_in_text, {
onInit() {
this.echo('type any text to highlight x');
}
});
:root {
--size: 1.4;
}
<script src="https://cdn.jsdelivr.net/npm/jquery"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-polyfills/keyboard.js"></script>
<link href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.css" rel="stylesheet"/>
我一直在关注
理想情况下,我希望能够用一种颜色(即红色)突出显示某些文本,而文本的其余部分是白色以外的其他颜色(即蓝绿色)。文本经常使用反斜杠,这会导致一些否则不会存在的错误。
下面是一个可重现的示例:
function highlight_all_occurences_of_x_in_text(text) {
text_list = text.split("");
output_list = [];
while (text_list.length > 0) {
current_character = text_list.shift();
if (current_character === 'x') {
output_list.push('[[gb;red;black]');
output_list.push('x');
output_list.push(']');
}
else {
output_list.push(current_character);
}
}
return '[[gb;yellow;black]' + output_list.join('') + ']';
}
如果我调用 highlight_all_occurences_of_x_in_text('\text') 甚至 highlight_all_occurences_of_x_in_text('\\text'),我会得到预期的输出。
但是如果我调用 highlight_all_occurences_of_x_in_text('\\x'),我会得到类似 '][[gb;red;blackx]' 的结果。
我该如何处理?
解决方法是使用
$.terminal.escape_brackets
或
$.terminal.escape_formatting
这两个函数都将 [ ] \
替换为 HTML 个实体。
发生这种情况的原因是 \]
是一个转义括号,如果您有 [[;yellow;]\]
终端将不会关闭格式并继续将其余部分作为文本的一部分处理,如果在那之后发生事件是另一种格式。
function highlight_all_occurences_of_x_in_text(text) {
var text_list = text.split("");
var output_list = [];
while (text_list.length > 0) {
current_character = text_list.shift();
if (current_character === 'x') {
output_list.push('[[gb;red;black]');
output_list.push('x');
output_list.push(']');
} else {
var str = $.terminal.escape_formatting(current_character);
output_list.push(str);
}
}
return '[[gb;yellow;black]' + output_list.join('') + ']';
}
var term = $('body').terminal(highlight_all_occurences_of_x_in_text, {
onInit() {
this.echo('type any text to highlight x');
}
});
:root {
--size: 1.4;
}
<script src="https://cdn.jsdelivr.net/npm/jquery"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-polyfills/keyboard.js"></script>
<link href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.css" rel="stylesheet"/>