[英]How can I use Unicode-aware regular expressions in 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.