JavaScript:我可以将过滤函数与正则表达式一起使用吗?

时间:2018-04-20 17:58:43

标签: javascript regex replace filter

我试图找到一个类似的问题,以避免创建副本,我不能,但我道歉,如果我错过任何。我刚开始学习如何编码,我遇到了这个问题:

使用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”](好像我根本没有过滤掉它)。我只是想知道我的代码是否犯了错误,或者是否只是不能使用带正则表达式的过滤器。

如果是这样,为什么?为什么不能使用带正则表达式的过滤器!?为什么我们必须使用替换?

2 个答案:

答案 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]