JavaScript 中包含转义序列的正则表达式对于 jquery 终端不起作用
Regular expression containing an escape sequence in JavaScript for jquery terminal not working
我正在尝试在 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)
解决方法如下:
$.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 以允许 return 字符串和来自函数格式化程序的位置,就像 tracking_replace 实用程序用于可以改变字符串长度的正则表达式格式化程序,而不当你将它插入终端时(使用 copy/paste 或使用插入功能),你将没有正确的位置,但它适用于 echo.
我正在尝试在 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)
解决方法如下:
$.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 以允许 return 字符串和来自函数格式化程序的位置,就像 tracking_replace 实用程序用于可以改变字符串长度的正则表达式格式化程序,而不当你将它插入终端时(使用 copy/paste 或使用插入功能),你将没有正确的位置,但它适用于 echo.