从string中删除不包含字母数字字符。 遇到了字符的问题

我想将下面的string转换为提供的输出。

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

我还没有find任何解决scheme,将处理像\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" 

任何帮助,将不胜感激。

工作scheme:

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

删除非字母数字字符

以下是从inputstring中去除非字母数字字符的正确的正则expression式:

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

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

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

input格式不正确

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

string中的反斜杠需要转义,如果从字面上看:

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

处理格式错误的string

如果您无法正确地转义inputstring(为什么不呢?),或者它来自某种不可信/错误configuration的源代码 – 您可以这样做:

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

请注意,string的JSON表示包含引号:

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

但他们也被replace正则expression式。

所有目前的答案仍然有怪癖,我能想到的最好的事情是:

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

下面是一个例子,它捕捉我可以在键盘上find的每个键:

 var string = '123abcABC-_*(!@#$%^&*()_-={}[]:\"<>,.?/~`'; var stripped = string.replace(/[^A-Za-z0-9]/g, ''); console.log(stripped); 

产出:“123abcABC”

问题不在于如何replace字符,问题在于如何inputstring。

它只是input中的第一个反斜杠字符,其他字符是控制字符\r\b\f\n

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

如果您想将input变成所需的输出,则需要用相应的字母replace每个控制字符,例如用字符\nreplace字符\n n

要replace控制字符,您需要使用像[\r]这样的字符集,因为\r在正则expression式中具有特殊含义:

 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/

你可以尝试这个正则expression式:

 value.replace(/[\W_-]/g, ''); 

如果你想要这个\\test\red\bob\fred\newstring,你应该转义所有反斜杠( \ )。 当你写\\test\\red\\bob\\fred\\new你的string实际上包含单个反斜杠。 你可以肯定这打印你的string。
所以如果你的string中的反斜杠被转义, myString.replace(/\W/g,'')将正常工作。