繁体   English   中英

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

[英]JavaScript: Can I use the filter function with regular expressions?

我试图找到一个类似的问题,以避免创建重复的内容,但我无法这样做,但是如果我错过了任何内容,我深表歉意。 我刚刚开始学习如何编码,但遇到了这个问题:

对于JavaScript,我想对所有非字母数字字符使用带有通用表达式的filter数组方法( 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 )中,它提到您可以将正则表达式与replace一起使用,并且我知道该怎么做,但它没有根本没有提到过滤器。

再举一个不太抽象的例子,这是我正在处理的代码:

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

如果是这样,为什么? 为什么不能将过滤器与正则表达式一起使用!? 为什么我们必须使用replace代替?

这确实不是与.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")); 

而不是先将字符串拆分为char,然后测试其中的每个字符,为什么不只获取字符串的所有匹配项呢?

 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM