进行挑战,比提供的解决方案要复杂得多,但是现在我想解决我偶然发现的正则表达式过滤器问题。
一切正常,直到currentFileExt()
函数的倒数第二行为止。我最初计划使用地图,但是在浏览了类似的StackOverflow解决方案之后,我发现.filter()
更合适。可悲的是,我似乎无法获得用于检查我提供的正则表达式的过滤器。
也许这对我来说是一个误解,但我使用过滤器来匹配拆分toArr
数组的每个字符串元素,如果它与正则表达式匹配,则应该对其进行过滤。不幸的是,这似乎没有发生。
function findFileName(fileName) {
let detect = (fileName.match(/\.+/g)) ? currentFileExt() : alert("Please enter");
return detect;
function currentFileExt() {
let toArr = fileName.split('');
let fileExtArr = [];
// let validCharacter = new RegExp(/\.[a-z]+/, 'g');
let validCharacter = /\.[a-z]+/;
fileExtArr = toArr.filter( (element) => { element.match(validCharacter) });
return fileExtArr.join('');
}
}
findFileName('java.java');
答案 0 :(得分:1)
问题之一是您的过滤器回调函数未返回任何值。为了对主体使用箭头功能,您需要添加return
关键字,或者更好的方法是删除主体。
String#match
可能也不是您要查找的方法,因为它会返回一个匹配数组,如果没有匹配项,则返回null。如果您使用RegExp#test
,则将获得一个布尔值,具体取决于字符串是否匹配正则表达式。
因此,以下内容可能会满足您的需求:
function findFileName(fileName) {
const detect = (fileName.match(/\.+/g)) ? currentFileExt() : alert("Please enter");
return detect;
function currentFileExt() {
const toArr = fileName.split('');
const validCharacter = /\.[a-z]+/;
const fileExtArr = toArr.filter(element => validCharacter.test(element));
return fileExtArr.join('');
}
}