diff --git a/README.markdown b/README.markdown index dc444939..776b054f 100644 --- a/README.markdown +++ b/README.markdown @@ -418,6 +418,17 @@ camelize("Moz-transform"); camelize("-moz-transform", true); // => "mozTransform" ``` +#### decamelize(string, [seperator="_"]) => string + +Converts camelized string to a decamelized one. + +```javascript +decamelize("theDecamelizeStringMethod"); +// => "the_decamelize_string_method" + +decamelize("webkitTransform", "-"); +// => "webkit-transform" +``` #### classify(string) => string diff --git a/decamelize.js b/decamelize.js new file mode 100644 index 00000000..55910ba4 --- /dev/null +++ b/decamelize.js @@ -0,0 +1,12 @@ +var decap = require('./decapitalize'); +var trim = require('./trim'); + +module.exports = function decamelize(string, separator) { + string = trim(string).split(/(?=[A-Z])/).map(function(word) { + return decap(word); + }); + if (separator === undefined) { + separator = "_"; + } + return string.join(separator); +}; diff --git a/index.js b/index.js index 7e570318..ba6659c8 100644 --- a/index.js +++ b/index.js @@ -42,6 +42,7 @@ s.pred = require('./pred'); s.succ = require('./succ'); s.titleize = require('./titleize'); s.camelize = require('./camelize'); +s.decamelize = require('./decamelize'); s.underscored = require('./underscored'); s.dasherize = require('./dasherize'); s.classify = require('./classify'); diff --git a/tests/decamelize.js b/tests/decamelize.js new file mode 100644 index 00000000..24ab5823 --- /dev/null +++ b/tests/decamelize.js @@ -0,0 +1,15 @@ +var equal = require('assert').equal; +var decamelize = require('../decamelize'); + + +test('#decamelize', function(){ + equal(decamelize('theDecamelizeStringMethod'), 'the_decamelize_string_method'); + equal(decamelize('webkitTransform', '-'), 'webkit-transform'); + equal(decamelize('theDecamelizeStringMethod_', ''), 'thedecamelizestringmethod_'); + equal(decamelize('TheDecamelizeStringMethod', '-'), 'the-decamelize-string-method'); + equal(decamelize(''), '', 'Decamelize empty string returns empty string'); + equal(decamelize(null), '', 'Decamelize null returns empty string'); + equal(decamelize(undefined), '', 'Decamelize undefined returns empty string'); + equal(decamelize(123), '123'); +}); +