注释很详细,直接上代码
涉及知识点:
- 正则表达式
- 可选链操作符
题干:
我的答案
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /></head><body><script>/*** 可能会有小友觉得这题很简单,别急,是很简单但可以优化,* 我们的目的是用更少的代码写更清晰且健壮的程序* 首先先分析一下这个题,我们需要取到最后一个.及后面的字符串,* 想想我们需要处理的极端情况:* 1. 输入为空字符串 -需返回空字符串* 2. 输入为. -需返回空字符串* 3. 输入为.txt -需返回.txt* 4. 输入为index.kk.js -需返回.js* * 条件这么多自然是正则匹配最方便了,下面我们来解析一下这个正则表达式* ()捕获,捕获内容的下标是从1开始,这里其实也可以不需要捕获,就当温习知识点了* \.表示匹配.,.是特殊字符,需要转义* [^.]表示匹配除了.之外的字符,+表示匹配一次或多次,为什么需用+,这是为了满足第二种情况,.后面肯定需要接内容的* $表示匹配字符串的结尾,这里可以解决第四种情况,我们需要的末尾符合条件的内容* * 万一啥也没匹配到,[1]必定报错的,难不成我们要将filename.match(regex)拿出来单独判断一下吗?* 这里我们可以使用?.(可选链操作符)来判断,当filename.match(regex)为undefined时,filename.match(regex)?.[1]是undefined而不是报错,* 当然这里提醒一下,牛客的判题环境不支持可选链操作符,别问问就是wa过了,但它的测例也就一个罢了,去掉.?随便过* 最后我们再加上个||不就完美解决了匹配不到的情况嘛,完美,撒花~*/const _getExFilename = (filename) => {// 补全代码const regex = /(\.[^.]+)$/;return filename.match(regex)?.[1]||'';}console.log(_getExFilename("index.html"));console.log(_getExFilename(".txt"));console.log(_getExFilename("index.kk.js"));//下面两个因为返回的是空字符串,所以加了个图标作为提示console.log("🫧"+_getExFilename("."));console.log("🎈"+_getExFilename(""));</script></body>
</html>