I have a function f similar to
function f(str){
alert("abc"+str);
}
Now, I want to use JavaScript special charecter "\b" in such a way that I can choose if I want to display the hardcoded string "abc" or not. For example,
f("\b\b"+"yz"); //should output "ayz"
I tried the same, but it does not work. In other words, I want to concat a string with a backspace character so that I can remove last characters from the string.
Can we do this in JavaScript?
EDIT The real code is too much big (its a HUGE 1 liner that concats many many strings). To map that in above example, we cannot edit the function f, so do whatever you want from outside function f.
The problem comes from the fact that \b
is just another character in the ASCII code. The special behaviour is only when implemented by some string reader, for example, a text terminal.
You will need to implement the backspace behaviour yourself.
function RemoveBackspaces(str)
{
while (str.indexOf("\b") != -1)
{
str = str.replace(/.?\x08/, ""); // 0x08 is the ASCII code for \b
}
return str;
}
Example: http://jsfiddle.net/kendfrey/sELDv/
Use it like this:
var str = RemoveBackspaces(f("\b\byz")); // returns "ayz"
EDIT: I realized this may not be what the OP was looking for, but it is definitely the easier way to remove characters from the end of a string in most cases.
You should probably just use string.substring
or string.substr
, both of which return some portion of string. You can get the substring from 0 to the string's length minus 2, then concatenate that with "yz" or whatever.
Interesting question. I first checked some assumptions about \b in JS.
If you try this:
console.log('abc\b\byz');
You get the same answer of 'abcyz'.
This means, it is not a function of concatentation, but a fundamental error in the approach.
I would modify your approach to use SubString, then to take the index of \b and slice out the previous character.
Something like this:
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);
}
and as an added bonus you get to use recursion!
note that this is a little slower than doing it this way:
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);
}
来源:https://stackoverflow.com/questions/11891653/javascript-concat-string-with-backspace