我试图找到一个类似的问题,以避免创建副本,我不能,但我道歉,如果我错过任何。我刚开始学习如何编码,我遇到了这个问题:
使用JavaScript,我想使用过滤器数组方法(https://www.freecodecamp.org/challenges/filter-arrays-with-filter)和所有非字母数字字符的通用表达式。
例如:
var newArray = oldArray.filter(function(val) {
return val !== /[\W_]/g;
});
我能这样做吗?在mozilla指南(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)中,它提到你可以使用带有替换的正则表达式,我知道如何做到这一点,但它根本没有提到过滤器。
再举一个不太抽象的例子,这是我正在研究的代码:
function palindrome(str) {
var splitStr = str.split("");
var filterArray = splitStr.filter(function(val) {
return val !== /[\W_]/g;
});
return filterArray;
}
palindrome("ey*e");
如果我到目前为止做的事情,函数应该返回[“e”,“y”,“e”]。但它返回[“e”,“y”,“*”,“e”](好像我根本没有过滤掉它)。我只是想知道我的代码是否犯了错误,或者是否只是不能使用带正则表达式的过滤器。
如果是这样,为什么?为什么不能使用带正则表达式的过滤器!?为什么我们必须使用替换?
答案 0 :(得分:1)
这真的不是与.filter()
有关的问题,只是你没有正确地测试你的正则表达式的字符串。
要针对正则表达式测试字符串,请使用 .test()
方法:
function palindrome(str) {
var splitStr = str.split("");
var filterArray = splitStr.filter(function(val) {
// Test the string against the regular expression
// and test for no match (whole thing is preceeded by !)
return !/[\W_]/g.test(val);
});
return filterArray;
}
console.log(palindrome("ey*e"));
答案 1 :(得分:0)
不是先将字符串拆分为字符,然后测试每一个字符串,为什么不直接获取字符串的所有匹配项?
function palindrome(str) {
return str.match(/[a-zA-Z0-9]/g) || [];
}
let chars = palindrome("ey*e");
console.log(chars);

关于使用的正则表达式:\W
与[^\w]
或[^a-zA-Z0-9_]
相同。因此,不 [\W_]
等同于[a-zA-Z0-9]
。