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

标签 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”](就好像我根本没有过滤它一样)。我只是想知道我的代码是否犯了一个错误,或者是否根本无法将过滤器与正则表达式一起使用。

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

最佳答案

这确实不是与 .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/

相关文章:

c# - 在 C# 中重新分配或替换变量的类型

javascript - onclick 带有表单的下拉菜单,单击外部关闭

javascript - 如果函数运行时间超过 n 秒,如何抛出和捕获错误

javascript - 如何编辑这个 Angular Material Chips CSS?

regex - 使用 awk 正则表达式排除哈希符号

regex - 如何从 Google 表格中的过滤器中选择多个值?

regex - 删除文本文件每行的第一个单词

jQuery 查找并替换变量中的文本

javascript - Tomcat Servlet GET 未从 Web 客户端接收参数

javascript - 如何更换当前的 Angular 转发器