1. 程式人生 > >位元組跳動第四場筆試演算法題——簡化路徑

位元組跳動第四場筆試演算法題——簡化路徑

題目

一個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

最後正則表示式還是很有必要學習一下的。