难以将正则表达式匹配到过滤方法

时间:2019-01-21 19:25:15

标签: javascript

进行挑战,比提供的解决方案要复杂得多,但是现在我想解决我偶然发现的正则表达式过滤器问题。

一切正常,直到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');

1 个答案:

答案 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('');
    }
}