0

我正在尝试在 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 = clear line)

4

1 回答 1

0

这是解决方案:

$.terminal.defaults.formatters.unshift([
    /(^|[^\x08]|[\r\n]{2}|&[^;]+;)\x08|[^\r\n]+\r\x1B(?:\[|[)K/g, '', {loop: true}
]);

除了最后一个,它几乎可以工作,]因为正则表达式之前删除\b了字符而不移动光标。

(?:\[|[)K需要,因为命令行接受带有 html 实体的第一个编码输入,因此您不能键入格式。

options 是 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 实用程序一样,如果没有这个,当你将它插入时你将没有正确的位置终端(使用复制/粘贴或使用插入功能),但它适用于回声。

于 2018-07-09T14:43:50.890 回答