带退格的JavaScript concat字符串
我有一个函数f类似于带退格的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行程序
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 thingf(“ab\b\b”+“yz”)
返回“ababyz”@Wesley,但它不会像您尝试的那样工作。它只能从存储的abc中删除。如果用户希望这样,我会写,但我不完全明白其中的意义,哈哈