kebabCase.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. var toValString = require('./toString')
  2. var helperStringSubstring = require('./helperStringSubstring')
  3. var helperStringLowerCase = require('./helperStringLowerCase')
  4. var kebabCacheMaps = {}
  5. /**
  6. * 将带驼峰字符串转成字符串,例如: projectName 转为 project-name
  7. *
  8. * @param {String} str 字符串
  9. * @return {String}
  10. */
  11. function kebabCase (str) {
  12. str = toValString(str)
  13. if (kebabCacheMaps[str]) {
  14. return kebabCacheMaps[str]
  15. }
  16. var rest = str.replace(/([a-z]?)([A-Z]+)([a-z]?)/g, function (text, prevLower, upper, nextLower, index) {
  17. var upperLen = upper.length
  18. if (upperLen > 1) {
  19. if (prevLower) {
  20. prevLower += '-'
  21. }
  22. if (nextLower) {
  23. return (prevLower || '') + helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1)) + '-' + helperStringLowerCase(helperStringSubstring(upper, upperLen - 1, upperLen)) + nextLower
  24. }
  25. }
  26. return (prevLower || '') + (index ? '-' : '') + helperStringLowerCase(upper) + (nextLower || '')
  27. })
  28. rest = rest.replace(/([-]+)/g, function (text, flag, index) {
  29. return index && index + flag.length < rest.length ? '-' : ''
  30. })
  31. kebabCacheMaps[str] = rest
  32. return rest
  33. }
  34. module.exports = kebabCase