我正在尝试在jQuery终端中执行特殊字符功能。我能够成功执行退格功能,但是执行转义功能时遇到了问题。
这是我尝试执行的代码。 使用的正则表达式:
(^|[^\x08]|\r\n|&[^;]+\x08|[\x1B[K]
输入字符串:
Checking current state.\t[ ]\b\b\b\b\b-\r\u001B[KChecking current state.\t[ ]\b\b\b\b\bFAIL\n\r\u001B
预期的最终输出:
Checking current state. [FAIL}
这里\ x1B [K是特殊字符,我想执行其功能。(\ x1B [K =清除行)
答案 0 :(得分:0)
这是解决方法:
$.terminal.defaults.formatters.unshift([
/(^|[^\x08]|[\r\n]{2}|&[^;]+;)\x08|[^\r\n]+\r\x1B(?:\[|[)K/g, '', {loop: true}
]);
除了最后一个]
以外,它几乎都可以工作,因为正则表达式将删除\b
之前的字符并且不移动光标。
(?:\[|[)K
是必需的,因为命令行首先接受html实体的编码输入,因此您不能键入格式。
选项是1.18.0版的新功能,可以循环替换,直到与正则表达式不匹配为止。
var term = $('body').terminal();
$.terminal.defaults.formatters.unshift([
/(^|[^\x08]|[\r\n]{2}|&[^;]+;)\x08|[^\r\n]+\r\x1B(?:\[|[)K/g, '', {loop: true}
]);
var str = 'Checking current state.\t[ ]\b\b\b\b\b-\r\u001B[KChecking current state.\t[ ]\b\b\b\b\bFAIL\n\r\u001B';
term.insert(str).echo(str);
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script><script src="https://rawgit.com/jcubic/leash/master/lib/wcwidth.js"></script><script src="https://unpkg.com/jquery.terminal/js/jquery.terminal.js"></script><script src="https://rawgit.com/inexorabletash/polyfill/master/keyboard.js"></script><script src="https://unpkg.com/jquery.terminal/js/unix_formatting.js"></script><script src="https://unpkg.com/prismjs@1.8.1/prism.js"></script><script src="https://unpkg.com/jquery.terminal/js/less.js"></script><script src="https://unpkg.com/jquery.terminal/js/prism.js"></script><link rel="stylesheet prefetch" href="https://unpkg.com/prismjs/themes/prism-coy.css"><link rel="stylesheet prefetch" href="https://unpkg.com/jquery.terminal/css/jquery.terminal.css">
编辑
改写更好的修补程序位于unix_formatting文件的devel分支中,但是现在它需要更多的工作才能使其与命令行一起使用,而仅与echo一起使用。
var term = $('body').terminal();
var str = 'Checking current state.\t[ ]\b\b\b\b\b-\r\u001B[KChecking current state.\t[ ]\b\b\b\b\bFAIL\r\n';
term.insert(str).echo(str);
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script><script src="https://rawgit.com/jcubic/leash/master/lib/wcwidth.js"></script><script src="https://rawgit.com/jcubic/jquery.terminal/devel/js/jquery.terminal.js"></script><script src="https://rawgit.com/inexorabletash/polyfill/master/keyboard.js"></script><script src="https://rawgit.com/jcubic/jquery.terminal/devel/js/unix_formatting.js"></script><script src="https://unpkg.com/prismjs@1.8.1/prism.js"></script><script src="https://unpkg.com/jquery.terminal/js/less.js"></script><script src="https://unpkg.com/jquery.terminal/js/prism.js"></script><link rel="stylesheet prefetch" href="https://unpkg.com/prismjs/themes/prism-coy.css"><link rel="stylesheet prefetch" href="https://unpkg.com/jquery.terminal/css/jquery.terminal.css">
此功能已经取代了unix_formatting中的朴素版本。但是,为了完全正常工作,我需要更新API,以允许从函数格式化程序返回字符串和位置,就像用于可更改字符串长度的用于正则表达式格式化程序的tracking_replace实用程序一样,如果没有此功能,则在将其插入到其中时将没有正确的位置终端(使用复制/粘贴或使用插入功能),但可用于回显。