scriptOJ 是首个 Web 前端开发评测系统,上面有很多前端题目,也涉及到算法,是前端er 的 OJ 系统,没用过的小伙伴可以尝试下。
很早就听说这个网站了,不过开局第一题一直写不出来,今天又看了一下总算是搞定了,在我的解法中用到了比较多的有关正则方面的知识,在这里总结一下。
下面就是进入首页会看到的第一题(好像定期会更换):
下面是我的解法:
const extname = (filename) => {
let re = /\.[a-zA-Z]+/ig;
if (re.test(filename)) {
// 第一次匹配
if (RegExp.leftContext == '') {
// 第一次匹配左边没有字符(只有后缀名)
return '';
}
let a = filename.match(re); // match会将匹配到的所有字符储存在一个数组中并返回
return a[a.length - 1]; // 返回最后一次匹配到的字符串
} else {
return ''; // 没有匹配到任何后缀名,直接返回空字符串
}
}
用于测试的数据大概有这么几种:
var str1 = 'test.ms.hello.jpg'; // 有很多 . 分割的字符串,但只有最后一个才是后缀名
var str2 = '.png'; // 只有后缀名,要求返回一个空字符串
var str3 = 'hello'; // 没有后缀名,要求返回一个空字符串
全面总结一下解题中与正则相关的知识:
- RegExp构造函数的属性
input
:用于匹配的字符串lastMatch
:最近一次匹配到的字符串lastParen
:最近一次匹配到的捕获组leftContext
:input中lastMatch之前的字符串rightContext
:input中lastMatch之后的字符串multiline
:匹配是否用于多行模式
举例:
var str= "this has been a short summer";
var re