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)