How can I convert PascalCase string into underscore_case/snake_case string? I need to convert dots into underscores as well.
eg. convert
TypeOfData.AlphaBeta into
type_of_data_alpha_beta How can I convert PascalCase string into underscore_case/snake_case string? I need to convert dots into underscores as well.
eg. convert
TypeOfData.AlphaBeta into
type_of_data_alpha_beta str.split(/\.?(?=[A-Z])/).join('_').toLowerCase(); u're welcome
var s1 = 'someTextHere'; var s2 = 'SomeTextHere'; var s3 = 'TypeOfData.AlphaBeta'; var o1 = s1.split(/\.?(?=[A-Z])/).join('_').toLowerCase(); var o2 = s2.split(/\.?(?=[A-Z])/).join('_').toLowerCase(); var o3 = s3.split(/\.?(?=[A-Z])/).join('_').toLowerCase(); console.log(o1); console.log(o2); console.log(o3); trim before the split solves it.You could try the below steps.
Capture all the uppercase letters and also match the preceding optional dot character.
Then convert the captured uppercase letters to lowercase and then return back to replace function with an _ as preceding character. This will be achieved by using anonymous function in the replacement part.
This would replace the starting uppercase letter to _ + lowercase_letter.
Finally removing the starting underscore will give you the desired output.
var s = 'TypeOfData.AlphaBeta'; console.log(s.replace(/(?:^|\.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, "")); OR
var s = 'TypeOfData.AlphaBeta'; alert(s.replace(/\.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, "")); any way to stop it for when a whole word is in uppercase. eg.
MotorRPMintomotor_rpminstead ofmotor_r_p_m? orBatteryAAAintobattery_aaainstead ofbattery_a_a_a?
var s = 'MotorRMP'; alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, "")); MotorRMP into motor_rpm instead of motor_r_p_m? or BatteryAAA into battery_aaa instead of battery_a_a_a.alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));s.replace(/\.?([A-Z]+)/g, '_$1').toLowerCase().replace(/^_/, "")Alternatively using lodash:
lodash.snakeCase(str); Example:
_.snakeCase('TypeOfData.AlphaBeta'); // ➜ 'type_of_data_alpha_beta' Lodash is a fine library to give shortcut to many everyday js tasks.There are many other similar string manipulation functions such as camelCase, kebabCase etc.
I ported the code in 1175208 from Python to JavaScript.
function camelToSnakeCase(text) { return text.replace(/(.)([A-Z][a-z]+)/, '$1_$2').replace(/([a-z0-9])([A-Z])/, '$1_$2').toLowerCase() } camelToSnakeCase('thisISDifficult') -> this_is_difficult camelToSnakeCase('thisISNT') -> this_isnt camelToSnakeCase('somethingEasyLikeThis') -> something_easy_like_this "alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma Problem - Need to convert a camel-case string ( such as a property name ) into underscore style to meet interface requirements or for meta-programming.
Explanation This line uses a feature of regular expressions where it can return a matched result ( first pair of () is $1, second is $2, etc ).
Each match in the string is converted to have an underscore ahead of it with _$1 string provided. At that point the string looks like alpha_Beta_Gamma.
To correct the capitalization, the entire string is converted toLowerCase().
Since toLowerCase is a fairly expensive operation, its best not to put it in the looping handler for each match-case, and run it once on the entire string.
After toLowerCase it the resulting string is alpha_beta_gamma ( in this example )
This will get you pretty far: https://github.com/domchristie/humps
You will probably have to use regex replace to replace the "." with an underscore.
I found this but I edited it so suit your question.
const camelToSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`).replace(/^_/,'') function toCamelCase(s) { // remove all characters that should not be in a variable name // as well underscores an numbers from the beginning of the string s = s.replace(/([^a-zA-Z0-9_\- ])|^[_0-9]+/g, "").trim().toLowerCase(); // uppercase letters preceeded by a hyphen or a space s = s.replace(/([ -]+)([a-zA-Z0-9])/g, function(a,b,c) { return c.toUpperCase(); }); // uppercase letters following numbers s = s.replace(/([0-9]+)([a-zA-Z])/g, function(a,b,c) { return b + c.toUpperCase(); }); return s; } Try this function, hope it helps.
CamelToUnderscore is needed.Note: I understand there are tons of good answers which solve this question elegantly. I was recently working on something similar to this where I chose not to use regex. So I felt to answer a non-regex solution to this.
const toSnakeCase = (str) => { return str.slice(0,1).toLowerCase() + str.split('').slice(1).map((char) => { if (char == char.toUpperCase()) return '_' + char.toLowerCase(); else return char; }).join(''); } Eg.
inputString = "ILoveJavascript" passed onto toSnakeCase() would become "i_love_javascript"