Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:模拟不带格式的字符串类型,然后带格式输出 问题_Javascript_String_Formatting_Char_Buffer - Fatal编程技术网

Javascript:模拟不带格式的字符串类型,然后带格式输出 问题

Javascript:模拟不带格式的字符串类型,然后带格式输出 问题,javascript,string,formatting,char,buffer,Javascript,String,Formatting,Char,Buffer,这里有一个有趣的问题:(我不擅长解释,所以可以先看一下示例:p) 我有一个带有(ansi)格式代码的字符串,我想输出该字符串的所有字符,除了所有的格式代码之外,以某种方式,它慢慢地生成一个字符串,直到找到一组特定的字符(§z),然后输出到该点的所有字符,但使用格式代码。然后开始键入消息的其余部分。每当到达§z时,打印(带格式)并再次开始键入(不带格式) 哦,在这个过程中,一些东西可以添加到“缓冲区”中。。 (所以我不能只使用.split(§z))) 例子 假设我有这个字符串: “[33;22m

这里有一个有趣的问题:(我不擅长解释,所以可以先看一下示例:p)

我有一个带有(ansi)格式代码的字符串,我想输出该字符串的所有字符,除了所有的格式代码之外,以某种方式,它慢慢地生成一个字符串,直到找到一组特定的字符(§z),然后输出到该点的所有字符,但使用格式代码。然后开始键入消息的其余部分。每当到达§z时,打印(带格式)并再次开始键入(不带格式)

哦,在这个过程中,一些东西可以添加到“缓冲区”中。。 (所以我不能只使用.split(§z)))

例子
假设我有这个字符串:

“[33;22m[1M欢迎![m§z你好[m”

然后,编写器将每秒输出一个字符,直到到达§z:

键入:W
打字:我们
欢迎光临

现在它看到§z并记录第一部分,但带有格式代码:

输出:[33;22m[1M欢迎![m]

然后重新开始并开始输出消息的其余部分:


键入:可能我不太理解这个问题。但是如果您的问题是如何在文档中添加另一种颜色。write,您可以在输出字符串中添加
“”+output+“”

(在本例中,表示绿色)

//要解决这个打印问题。。。
var contentBuffer=“”;
var displayContent=“”;
var缓冲=假;
var INPUT=“ Welcome!§z Hello ”;
//打印功能
函数printMessage(){
//删除格式。用户不键入颜色,因此我们也不键入颜色。
contentBuffer+=INPUT.replace(/[\u001b\u009b][[()#?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=>解决方案

以下是我如何解决这个问题(目前):

我知道每一个foramtting代码都以转义字符开头(因为我只使用ansi颜色格式代码),所有代码都以字母“m”结尾。正如我所说,简单地拆分字符串不是一个选项,而是我创建了两个单独的字符串。缓冲区将附加到这两个字符串,除非它到达转义字符,然后它将只附加到其中一个字符串,直到到达“m”,然后继续正常行为

代码
//要解决这个打印问题。。。
var contentBuffer=“”;
var displayContent=“”;
var typeContent=“”;
var缓冲=假;
var输入=”;
//打印功能
函数printMessage(){
//删除格式化。用户不输入格式化代码,所以我们也不输入。
contentBuffer+=输入;
如果(!缓冲){
缓冲=真;
缓冲区();
}
}
函数缓冲区(){
如果(contentBuffer!=“”){
if(contentBuffer[0]==“§”){
if(contentBuffer[1]=“z”){
文件。写入(“输出:+displayContent+”
); typeContent=“”; displayContent=“”; } contentBuffer=contentBuffer.slice(2); }否则,如果检测到(contentBuffer[0]=“\x1b”){//转义字符! for(var i=0,len=contentBuffer.length;i); contentBuffer=contentBuffer.slice(1); } 设置超时(缓冲区,1000); }否则{ 缓冲=假; } } 函数suddenEvent(){ document.write(“突然发生事件!
”); 输入=“再见!§z”; printMessage(); } //运行它: INPUT=“\x1b[33;22m\x1b[1mWelcome!\x1b[m§z Hello\x1b[m”; 文件。写入(“输入:“+Input+”

); printMessage();
setTimeout(suddenEvent,28000);
感谢您的回复,但以颜色输出不是我的问题。document.write();无论如何都是一个占位符。我希望我的脚本产生我在示例中显示的行为。我对我的帖子做了一些修改,希望现在更清楚。。