带有退格的JavaScript concat字符串

JavaScript concat string with backspace

我有一个函数f类似于

1
2
3
function f(str){
    alert("abc"+str);
}

现在,我想使用javascript特殊字符"",这样我就可以选择是否要显示硬编码字符串"abc"。例如,

1
f("\b\b"+"yz"); //should output"ayz"

我也试过,但没用。换句话说,我想用退格字符来连接一个字符串,以便从字符串中删除最后一个字符。

我们可以用JavaScript来实现这一点吗?

编辑真正的代码太大了(它是一个巨大的1行程序,可以连接许多字符串)。在上面的例子中,为了映射这个函数,我们不能编辑函数f,所以从函数f的外部执行您想要的任何操作。


问题来自这样一个事实:\b只是ASCII代码中的另一个字符。只有在某些字符串阅读器(例如,文本终端)实现特殊行为时。

您将需要自己实现退格行为。

1
2
3
4
5
6
7
8
function RemoveBackspaces(str)
{
    while (str.indexOf("\b") != -1)
    {
        str = str.replace(/.?\x08/,""); // 0x08 is the ASCII code for \b
    }
    return str;
}

示例:http://jsfiddle.net/kendfrey/seldvy/

这样使用:

1
var str = RemoveBackspaces(f("\b\byz")); // returns"ayz"


像这样:

1
2
3
4
5
6
7
8
9
10
function f(str, abc){
   if(!abc) abc ="abc";
   if (str.indexOf("\b") !="undefined")
   {
       abc = abc.slice(0,-1);
       str = str.replace("\b","");
       f(str, abc);
   }
   else alert(abc+str);
}

作为额外的奖励,你可以使用递归!

注意,这样做比这样做慢一点:

1
2
3
4
5
6
7
8
9
10
11
function f(str){
    var count = 0;
    var abc ="abc";
    for(var i = 0; i < str.length; i++)
    {
       if(str[i] ="\b") //at least i think its treated as one character...
       count++;
    }
    abc = abc.slice(0, count * -1);
    alert(abc+str);
}


有趣的问题。我首先检查了JS中关于的一些假设。

如果您尝试此操作:

console.log('abcyz');

你得到了同样的答案"abcyz"。

这意味着,它不是一个具体化的函数,而是方法中的一个基本错误。

我将修改您的方法以使用子字符串,然后获取的索引并切掉前一个字符。


编辑:我意识到这可能不是操作人员想要的,但在大多数情况下,这绝对是从字符串末尾删除字符的简单方法。

您可能只需要使用string.substringstring.substr,这两种方法都会返回字符串的一部分。您可以将子字符串的长度从0减到字符串的长度减2,然后将其与"yz"或其他内容连接起来。