我的函数f类似于
function f(str){
alert("abc"+str);
}
现在,我想以这样的方式使用JavaScript特殊字符“\ b”,我可以选择是否要显示硬编码字符串“abc”。例如,
f("\b\b"+"yz"); //should output "ayz"
我尝试了同样的方法,但它不起作用。换句话说,我想用一个退格字符连接一个字符串,这样我就可以从字符串中删除最后一个字符。
我们可以在JavaScript中执行此操作吗?
修改 真正的代码太大了(它是一个巨大的1个班轮,可以连接许多字符串)。为了映射上面的例子,我们不能编辑函数f,所以做任何你想要的外部函数f。
答案 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.substring
或string.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);
}