UNPKG

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