牛客JS题(四)分隔符

注释很详细,直接上代码

涉及知识点:

  1. 正则表达式-捕获
  2. 正则表达式-转义
  3. 正则表达式- 匹配非
  4. 可选链操作符

题干:

在这里插入图片描述

我的答案

<!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>

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码对我眨眼睛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值