带有退格的JavaScript concat字符串

时间:2012-08-09 20:43:49

标签: javascript string concatenation backspace

我的函数f类似于

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

现在,我想以这样的方式使用JavaScript特殊字符“\ b”,我可以选择是否要显示硬编码字符串“abc”。例如,

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

我尝试了同样的方法,但它不起作用。换句话说,我想用一个退格字符连接一个字符串,这样我就可以从字符串中删除最后一个字符。

我们可以在JavaScript中执行此操作吗?

修改 真正的代码太大了(它是一个巨大的1个班轮,可以连接许多字符串)。为了映射上面的例子,我们不能编辑函数f,所以做任何你想要的外部函数f。

4 个答案:

答案 0 :(得分:7)

问题来自于\b只是ASCII代码中的另一个字符。特殊行为仅在某些字符串阅读器实现时才会生成,例如文本终端。

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

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/sELDv/

像这样使用:

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

答案 1 :(得分:1)

编辑:我意识到这可能不是OP所寻求的,但在大多数情况下,它绝对是从字符串末尾删除字符的更简单方法。

您应该只使用string.substringstring.substr,两者都会返回字符串的某些部分。您可以将子串从0到字符串的长度减去2,然后将其与“yz”或其他任何内容连接起来。

答案 2 :(得分:1)

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

如果您尝试这样做:

的console.log( 'ABC \ B \ BYZ');

你得到'abcyz'的相同答案。

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

我会修改你使用SubString的方法,然后取\ b的索引并切出前一个字符。

答案 3 :(得分:1)

这样的事情:

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);
}

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

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

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);
}