iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
自我挑戰組

解三十天的 CodeWars系列 第 20

Convert PascalCase string into snake_case

  • 分享至 

  • xImage
  •  

CodeWars 題目

Link

難度

5 kyu

題目

以大寫英文為分組,轉為全小寫,並且用 _ 分隔;也就是蛇行命名法。

思路

以正則捕獲,捕獲目標:MoviesAndBooks => Movies, And, Books。
再對字串按需求處理即可。

實作

function toUnderscore(string) {
  return String(string).replace(/([A-Z][a-z0-9]+)/g,(match,p1,index)=>{
    if(index === 0) return match.toLowerCase();
    return "_" + match.toLowerCase();
  })
}

本次是要實現把參數從原本的駝峰式轉為蛇行式;也就是說要拆解的目標是以大寫字母為分界、後接小寫字母或數字。
/([A-Z][a-z0-9]+)/g 這段正則表達式實作這段拆解。
[] 包裹可能出現的類型,+ 表示出現一次或多次,g 表示從頭找到尾。
最後 match 到的,如果 index 為 0 表示在字首就發現,直接返回小寫後的結果。

否則串接下劃線符號、最終拼接成一個字串。

他人的解法

function toUnderscore(string) {
   return string.toString().split(/(?=[A-Z])/).join('_').toLowerCase();
};

最佳解的邏輯跟我的大同小異,會想放上來是因為⋯⋯
原來 split 可以帶入正則表達式!!!

心得

第二十天!再度到達一個里程碑~


上一篇
Product of consecutive Fib numbers
下一篇
Longest Common Subsequence
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言