From 89d2a2f0cc184ea510e9fe97a3fab780c966b5f1 Mon Sep 17 00:00:00 2001 From: Shaban-Eissa Date: Fri, 7 Jun 2024 18:26:05 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=A5=20NEW:=20Refactor=20snakeToCamel?= =?UTF-8?q?=20function=20to=20use=20a=20more=20efficient=20regex=20pattern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 79.convert-snake_case-to-camelCase.md | 84 +++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 79.convert-snake_case-to-camelCase.md diff --git a/79.convert-snake_case-to-camelCase.md b/79.convert-snake_case-to-camelCase.md new file mode 100644 index 0000000..2335a9c --- /dev/null +++ b/79.convert-snake_case-to-camelCase.md @@ -0,0 +1,84 @@ +# 79. convert snake_case to camelCase + +### Problem + +https://bigfrontend.dev/problem/convert-snake_case-to-camelCase + +# + +### Problem Description + +Do you prefer [snake_case](https://en.wikipedia.org/wiki/Snake_case) or [camelCase](https://en.wikipedia.org/wiki/Camel_case) ? + +Anyway, please create a function to convert snake_case to camcelCase. + +```js +snakeToCamel('snake_case'); +// 'snakeCase' +snakeToCamel('is_flag_on'); +// 'isFlagOn' +snakeToCamel('is_IOS_or_Android'); +// 'isIOSOrAndroid' +snakeToCamel('_first_underscore'); +// '_firstUnderscore' +snakeToCamel('last_underscore_'); +// 'lastUnderscore_' +snakeToCamel('_double__underscore_'); +// '_double__underscore_' +``` + +contiguous underscore `__`, leading underscore `_a`, and trailing underscore `a_` should be kept untouched. + +# + +### Solution + +```js +/** + * @param {string} str + * @return {string} + */ +function snakeToCamel(str) { + return str.replace(/[a-z]_[a-z]/gi, (match) => { + return match[0] + match[2].toUpperCase(); + }); +} +``` + +# + +### Refactored Solution + +```js +/** + * @param {string} str + * @return {string} + */ +function snakeToCamel(str) { + return str.replace(/([^_])_([^_])/g, (_, before, after) => { + return before + after.toUpperCase(); + }); +} +``` + +# + +### Solution with Lookbehind + +```js +/** + * @param {string} str + * @return {string} + */ +function snakeToCamel(str) { + return str.replace(/(?<=[a-z])_[a-z]/gi, (match) => { + return match[1].toUpperCase(); + }); +} +``` + +# + +### Reference + +[Problem Discuss](https://bigfrontend.dev/problem/convert-snake_case-to-camelCase/discuss)