我试图找到一个类似的问题以避免创建重复的问题,但我找不到,但如果我错过了任何问题,我深表歉意。我刚刚开始学习如何编码,就遇到了这个问题:
对于 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”](就好像我根本没有过滤它一样)。我只是想知道我的代码是否犯了一个错误,或者是否根本无法将过滤器与正则表达式一起使用。
如果是这样,为什么?为什么不能使用带有正则表达式的过滤器!?为什么我们必须使用替换?
最佳答案
这确实不是与 .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"));
关于JavaScript:我可以将过滤函数与正则表达式一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49947344/