带退格的JavaScript concat字符串

带退格的JavaScript concat字符串,javascript,string,concatenation,backspace,Javascript,String,Concatenation,Backspace,我有一个函数f类似于 function f(str){ alert("abc"+str); } 现在,我想使用JavaScript特殊字符“\b”,这样我就可以选择是否显示硬编码字符串“abc”。比如说, f("\b\b"+"yz"); //should output "ayz" 我也试过了,但没用。换句话说,我想用一个退格字符连接一个字符串,这样我就可以从字符串中删除最后一个字符 我们可以用JavaScript来实现吗 编辑 真正的代码太大了(它是一个包含许多字符串的巨大的1行程序

我有一个函数f类似于

function f(str){
    alert("abc"+str);
}
现在,我想使用JavaScript特殊字符“\b”,这样我就可以选择是否显示硬编码字符串“abc”。比如说,

f("\b\b"+"yz"); //should output "ayz"
我也试过了,但没用。换句话说,我想用一个退格字符连接一个字符串,这样我就可以从字符串中删除最后一个字符

我们可以用JavaScript来实现吗

编辑
真正的代码太大了(它是一个包含许多字符串的巨大的1行程序)。在上面的示例中,为了映射这一点,我们无法编辑函数f,因此可以从函数f外部执行任何操作。

编辑:我意识到这可能不是OP想要的,但在大多数情况下,从字符串末尾删除字符肯定是更简单的方法


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

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

如果您尝试以下方法:

log('abc\b\byz')

你会得到“abcyz”的相同答案

这意味着,这不是凝聚的函数,而是方法中的一个基本错误

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

类似以下内容:

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);
}
var str = RemoveBackspaces(f("\b\byz")); // returns "ayz"
作为额外的奖励,您可以使用递归

请注意,这比这样做要慢一些:

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);
}
函数f(str){
var计数=0;
var abc=“abc”;
对于(变量i=0;i
问题源于
\b
只是ASCII码中的另一个字符。这种特殊行为只有在某些字符串读取器(例如文本终端)实现时才会出现

您需要自己实现退格行为

function RemoveBackspaces(str)
{
    while (str.indexOf("\b") != -1)
    {
        str = str.replace(/.?\x08/, ""); // 0x08 is the ASCII code for \b
    }
    return str;
}
例如:

像这样使用它:

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);
}
var str = RemoveBackspaces(f("\b\byz")); // returns "ayz"

是的,我们能做到。但是我不能“给他一个密码”。一种方法是分析传递给函数的
str
,捕捉
\b
s并执行一些字符串操作。这是一个非常有趣的问题。我急切地想知道答案。在哪里传递索引。负数索引将提前切片您是否尝试过
f(“\b\byz”)
?@DGH:是的,它说“abcyz”不是一个坏主意,但我发现它执行不正确。例如,
RemoveBackspaces(“abcde\b\b”+“yz”)返回'yz'非常酷,你能解释一下正则表达式吗?我太高了,无法理解。正则表达式匹配任何字符(
),后跟一个退格(
\x08
),并用一个空字符串替换所有出现的字符。非常酷..谢谢。如果我没有从函数f外部得到解决我问题的答案,我会接受这一点。@hrishikeshp19这确实在函数外部起作用。只需在函数返回的字符串上调用它即可。还没有,
f(“abcde\b\b”+“yz”)
返回“ababcdeyz”Saem thing
f(“ab\b\b”+“yz”)
返回“ababyz”@Wesley,但它不会像您尝试的那样工作。它只能从存储的abc中删除。如果用户希望这样,我会写,但我不完全明白其中的意义,哈哈