Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中替换一行中的一个或两个退格以及它们前面的字符?_Javascript_Regex_Replace - Fatal编程技术网

如何在javascript中替换一行中的一个或两个退格以及它们前面的字符?

如何在javascript中替换一行中的一个或两个退格以及它们前面的字符?,javascript,regex,replace,Javascript,Regex,Replace,我有这样的代码: string.replace(/(.|\r\n)\x08/g, ''); 这将替换退格和它前面的一个字符,但它不适用于一行中有多个退格的情况,如'foo\b\b'。如何删除退格之前的字符以获得字符串'f''+'表示“1或更多”,请尝试 string.replace(/(.|\r\n)+\x08/g',)'+'表示“1或更多”,请尝试 string.replace(/(.|\r\n)+\x08/g',)我想到了这个: 'foo\b\b'.replace(/((?:[^\x08]

我有这样的代码:

string.replace(/(.|\r\n)\x08/g, '');

这将替换退格和它前面的一个字符,但它不适用于一行中有多个退格的情况,如
'foo\b\b'
。如何删除退格之前的字符以获得字符串
'f'

'+'表示“1或更多”,请尝试
string.replace(/(.|\r\n)+\x08/g',)

'+'表示“1或更多”,请尝试 string.replace(/(.|\r\n)+\x08/g',)

我想到了这个:

'foo\b\b'.replace(/((?:[^\x08]|\r\n)+)(\x08+)/g, function(_, chars, backspaces) {
    return chars.replace(new RegExp('(.|\r\n){' + backspaces.length + '}$'), '');
});
我想到了这个:

'foo\b\b'.replace(/((?:[^\x08]|\r\n)+)(\x08+)/g, function(_, chars, backspaces) {
    return chars.replace(new RegExp('(.|\r\n){' + backspaces.length + '}$'), '');
});
您可以尝试以下方法:

str="abc\b\bdefg";
while(str.match(/\w\x08/)){
   str=str.replace(/\w\x08/g,"");
}
它将继续删除“字符+空格”序列,而它们仍在字符串中

您可以尝试以下方法:

str="abc\b\bdefg";
while(str.match(/\w\x08/)){
   str=str.replace(/\w\x08/g,"");
}

它将继续删除“字符+空格”序列,而它们仍在字符串中

如果只想删除字符串中的一个或两个0x08字符及其前面的字符,只需将正则表达式更改为

/(.|\r\n)\x08{1,2}/g

但是我想你要做的是每0x08删除1个字符你可以这样做

/((.|\r\n)\x08 |(.|\r\n){2}\x08{2})/g

两个人。如果你想做得更多,我想写一个函数,一个字符一个字符地遍历字符串,然后一次迭代地解析它会更快

函数删除反斜杠(str){
var结果=”;
for(str中的var i){
if(str.charCodeAt(i)==8)
{      
结果=结果切片(0,-1);
}否则{
结果+=str.charAt(i);
}
}  
返回结果;
}
var b=removeBackslashes('foo\b\basd');

控制台日志(b,b.长度)如果只想删除字符串中的一个或两个0x08字符及其前面的字符,只需将正则表达式更改为

/(.|\r\n)\x08{1,2}/g

但是我想你要做的是每0x08删除1个字符你可以这样做

/((.|\r\n)\x08 |(.|\r\n){2}\x08{2})/g

两个人。如果你想做得更多,我想写一个函数,一个字符一个字符地遍历字符串,然后一次迭代地解析它会更快

函数删除反斜杠(str){
var结果=”;
for(str中的var i){
if(str.charCodeAt(i)==8)
{      
结果=结果切片(0,-1);
}否则{
结果+=str.charAt(i);
}
}  
返回结果;
}
var b=removeBackslashes('foo\b\basd');


控制台日志(b,b.长度)这将替换字符串开头的所有内容。抱歉,加号的位置错误,字符串。替换(/(.|\r\n)\x08+/g',);这将把
'foo\b\b'
替换为
'fo'
而不是
'f'
,我不明白。您需要像abc\b\bdefg->\b\bdefg这样的替换?我需要
abc\b\bdefg->adefg
。这将替换字符串开头的所有内容。抱歉,加号的位置不对,字符串。替换(/(。\r\n)\x08+/g');这将把
'foo\b\b'
替换为
'fo'
而不是
'f'
,我不明白。你需要像abc\b\bdefg->\b\bdefg这样的替换吗?我需要
abc\b\bdefg->adefg
。如果你在退格之前替换一个字符,那么如何从
foo\b\b
中得到
f
?这意味着你想替换尽可能多的字符,不是吗?@cezar是的,你是对的。
foo\bo\b\b
的预期结果是什么?好的,我相信我的答案应该满足你的要求。如果没有,请告诉我。如果在退格之前替换一个字符,那么如何从
foo\b\b
中找到
f
?这意味着你想替换尽可能多的字符,不是吗?@cezar是的,你是对的。
foo\bo\b\b
的预期结果是什么?好的,我相信我的答案应该满足你的要求。如果没有,请告诉我。我最终使用了这样的正则表达式
/([^\x08]|\r\n)\x08/
,因为我需要匹配每个字符,而且
\r\n
需要是单个字符。我最终使用了这样的正则表达式
/([^\x08]|\r\n)\x08/
,因为我需要匹配每个字符,而且
\r\n
需要是单个字符。