为了账号安全,请及时绑定邮箱和手机立即绑定

从字符串中删除非字母数字字符。遇到[\]字符

/ 猿问

从字符串中删除非字母数字字符。遇到[\]字符

我想将以下字符串转换为提供的输出。


Input:  "\\test\red\bob\fred\new"

Output: "testredbobfrednew"

我还没有发现,将处理特殊字符,如任何解决方案\r,\n,\b,等。


基本上,我只是想摆脱所有不是字母数字的东西。这是我尝试过的...


Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");

Output 1:  "testedobredew"


Attempt 2: "\\test\red\bob\fred\new".replace(/['`~!@#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");

Output 2:  "testedobred [newline] ew"


Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");

Output 3:  "testedobred [newline] ew"


Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');

Output 4:  "testedobred [newline] ew"

尝试多个步骤


function cleanID(id) {

    id = id.toUpperCase();

    id = id.replace( /\t/ , "T");

    id = id.replace( /\n/ , "N");

    id = id.replace( /\r/ , "R");

    id = id.replace( /\b/ , "B");

    id = id.replace( /\f/ , "F");

    return id.replace( /[^a-zA-Z0-9]/ , "");

}

结果


Attempt 1: cleanID("\\test\red\bob\fred\new");

Output 1: "BTESTREDOBFREDNEW"

任何帮助,将不胜感激。


工作解决方案:


Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');

Output 1: "testredbobfrednew"


查看完整描述

3 回答

?
陪伴而非守候

删除非字母数字字符

以下是/正确的正则表达式,用于从输入字符串中剥离非字母数字字符:


input.replace(/\W/g, '')

请注意,\W这等效于[^0-9a-zA-Z_]-它包括下划线字符。要删除下划线,请使用例如:


input.replace(/[^0-9a-z]/gi, '')

输入格式错误

由于测试字符串包含各种转义的字符(不是字母数字),因此它将删除它们。


如果要按字面意义进行处理,则字符串中的反斜杠需要转义:


"\\test\\red\\bob\\fred\\new".replace(/\W/g, '')

"testredbobfrednew" // output

处理格式错误的字符串

如果您无法正确转义输入字符串(为什么?),或者它来自某种不受信任/配置错误的源,则可以执行以下操作:


JSON.stringify("\\test\red\bob\fred\new").replace(/\W/g, '')

"testredbobfrednew" // output

请注意,字符串的json表示形式包括引号:


JSON.stringify("\\test\red\bob\fred\new")

""\\test\red\bob\fred\new""

但是它们也会被替换的正则表达式删除。


查看完整回答
反对 回复 2019-10-15
?
jeck猫

当前所有的答案仍然有古怪之处,我能想到的最好的事情是:


string.replace(/[^A-Za-z0-9]/g, '');

这是捕获我在键盘上可以找到的每个键的示例:


var string = '123abcABC-_*(!@#$%^&*()_-={}[]:\"<>,.?/~`';

var stripped = string.replace(/[^A-Za-z0-9]/g, '');

console.log(stripped);

输出:“ 123abcABC”


查看完整回答
反对 回复 2019-10-15
?
回首忆惘然

问题不在于如何替换字符,而在于如何输入字符串。


这是只有在输入这是一个反斜杠字符的第一个反斜杠,其他都是控制字符的一部分\r,\b,\f和\n。


由于这些反斜杠不是单独的字符,而是编写单个控制字符的部分符号,因此不能单独删除它们。也就是说,您不能从中删除反斜杠,\n因为它不是两个单独的字符,这是编写控制字符LF或换行符的方式。


如果您想将该输入转换为所需的输出,则需要将每个控制字符替换为相应的字母,例如\n,将字符替换为character n。


要替换控制字符,您需要使用字符集,例如[\r],\r在正则表达式中具有特殊含义:


var input = "\\test\red\bob\fred\new";


var output = input

    .replace(/[\r]/g, 'r')

    .replace(/[\b]/g, 'b')

    .replace(/[\f]/g, 'f')

    .replace(/[\n]/g, 'n')

    .replace(/\\/g, '');

演示:http://jsfiddle.net/SAp4W/


查看完整回答
反对 回复 2019-10-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信