从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每个控制字符,例如用字符\n
replace字符\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\new
string,你应该转义所有反斜杠( \
)。 当你写\\test\\red\\bob\\fred\\new
你的string实际上包含单个反斜杠。 你可以肯定这打印你的string。
所以如果你的string中的反斜杠被转义, myString.replace(/\W/g,'')
将正常工作。