作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
进行挑战,走了比提供的解决方案复杂得多的路线,但现在我想解决我偶然发现的正则表达式过滤器问题。
一切正常,直到 currentFileExt()
函数的倒数第二行。我最初计划使用 map,但在查看类似的 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');
最佳答案
问题之一是您的过滤器回调函数没有返回任何值。为了使用带有主体的箭头函数来做到这一点,您需要添加一个 return
关键字或更好的关键字,但只需删除主体即可。
String#match
也可能不是您正在寻找的方法,因为它返回一个匹配数组,如果没有匹配则返回 null。如果您使用RegExp#test
,您将获得一个 bool 值,具体取决于字符串是否与正则表达式匹配。
所以也许以下内容可以满足您的需求:
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('');
}
}
关于javascript - 难以将正则表达式与过滤方法匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54296579/
我想模拟这个函数: function getMetaData(key) { var deferred = $q.defer(); var s3 = vm.ini
我是一名优秀的程序员,十分优秀!