我有一个字符串数组,其中包含许多不同的字符。我正在遍历数组并使用.replace(RegExp,Replacement)方法,但是我似乎无法使其正常工作。我正在使用的表达式是“ / [^ \ w \ d]”。我正在尝试删除任何不是字母或数字的内容(包括空格),并用“ _”替换(以使其更适合文件名)。我已经测试了上面的正则表达式,它应该是正确的。但是我得到的结果很奇怪和令人讨厌。以下代码将重现我的问题。
var StringArray = ["ABCdef123®","ABCdef/123®","ABCde f123®","ABCde/f123®","AB Cde\\f123®"];
const myRegex = new RegExp("/[^\w\d]");
var NewString;
var counter = 0;
StringArray.forEach(function(item){
NewString = item.replace(myRegex,"_");
console.log("Old String: " + item);
console.log("New String: "+ NewString);
counter++;
})
输出将如下所示
Old String: ABCdef123®
New String: ABCdef123®
Old String: ABCdef/123®
New String: ABCdef_23®
Old String: ABCde f123®
New String: ABCde f123®
Old String: AB Cde/f123®
New String: AB Cde_123®
Old String: AB Cde\f123®
New String: AB Cde\f123®
它将找不到反斜杠或“®”符号。当它确实找到了东西时,它还会删除以下字符。我在这里做什么错了?
答案 0 :(得分:1)
您需要使用/\W/
,这意味着:不是字母,数字或_
:
var StringArray = ["ABCdef123®","ABCdef/123®","ABCde f123®","ABCde/f123®","AB Cde\\f123®"];
const myRegex = new RegExp(/\W/, 'g');
var NewString;
var counter = 0;
StringArray.forEach(function(item){
NewString = item.replace(myRegex,"_");
console.log("Old String: " + item);
console.log("New String: "+ NewString);
counter++;
})
答案 1 :(得分:1)
const myRegex = /\W/g;
有效。您希望g替换所有出现的内容。您的新Regexp语法错误。它不应包含斜杠。
答案 2 :(得分:1)
实际上有一个用于非字母和数字的正则表达式,它是\W
。
const myRegex = /\W/g;
应该可以解决这个问题:)