字节跳动第四场笔试算法题——简化路径

题目

一个unix格式的路径, 将其简化

例如

/a/   
//简化结果为: /a

/a/././b/../../c
简化结果为:/c

我的答案

看到这种字符串一类的题目, 就忍不住想用正则表达式完成, 如下

function getPath(str) {
    let reg1 = /\.\//g
    let reg2 = /(\/){2,}/g
    let reg3 = /\./g
    str = str.replace(reg1, '').replace(reg2, '/').replace(reg3,  '../')
    let reg4 = /\.\.\//g
    let reg6 = /[a-z]+\/\.\.\//
    let str1 = str
    while (reg4.exec(str)){
        str1 = str1.replace(reg6, '')
    }
    str = str1.replace(/(\/$)/, '')
    console.log(str)
    return str
}

let str = '/a/././b//../../c/'
getPath(str)

假装结尾

最开始我在正则中使用了“?=”, 但是一直匹配不成功。这里抛出一个问题, 如果谁会, 还请告知一下。

console.log(/(?=^a)bd/.test('abd,bcd'))//为什么会打印出false

最后正则表达式还是很有必要学习一下的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值