@lancercomet/utils
Version:
My personal utils lib.
104 lines (103 loc) • 3.81 kB
JavaScript
var CHAR_REGEX = charRegex();
/**
* 将字符串转化为驼峰.
*
* @example
* toCamelCase('lancer-comet') // lancerComet
*
* @param {string} text
* @returns {string}
*/
function toCamelCase(text) {
return text.replace(/-\w/g, clearAndUpper);
}
/**
* 将字符串转换为帕斯卡.
*
* @example
* toPascalCase('lancerc-comet') // LancerComet
*
* @param {string} text
* @returns {string}
*/
function toPascalCase(text) {
return text.replace(/(^\w|-\w)/g, clearAndUpper);
}
/**
* 将字符串转化为 KebabCase.
*
* @example
* toKebabCase('lancerComet') // lancer-comet
*
* @param {string} text
* @returns {string}
*/
function toKebabCase(text) {
return toPascalCase(text)
.replace(/[A-Z]/g, function (t) { return '-' + t.toLowerCase(); })
.replace(/^-/, '')
.replace(/-$/, '');
}
/**
* 获取字符串字节长度.
* 一个汉字(双字节字符)将被当作两个字节统计.
*
* @param {string} str
* @returns {number}
*/
function getStringByteLength(str) {
return typeof str !== 'string'
? 0
: str.replace(/[\u4e00-\u9fa5]/g, 'aa').length;
}
/**
* 获取字符串字符长度.
* 此方法将把任意一个字符统计为 1, 包括 Unicode 的颜文字.
*
* @param {string} str
* @returns {number}
*/
function getStringCharCount(str) {
var _a, _b;
return typeof str !== 'string'
? 0
: (_b = (_a = str.match(CHAR_REGEX)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
}
export { getStringByteLength, toCamelCase, toPascalCase, toKebabCase, getStringCharCount };
function charRegex() {
// Used to compose unicode character classes.
var astralRange = '\\ud800-\\udfff';
var comboMarksRange = '\\u0300-\\u036f';
var comboHalfMarksRange = '\\ufe20-\\ufe2f';
var comboSymbolsRange = '\\u20d0-\\u20ff';
var comboMarksExtendedRange = '\\u1ab0-\\u1aff';
var comboMarksSupplementRange = '\\u1dc0-\\u1dff';
var comboRange = comboMarksRange + comboHalfMarksRange + comboSymbolsRange +
comboMarksExtendedRange + comboMarksSupplementRange;
var varRange = '\\ufe0e\\ufe0f';
var familyRange = '\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83C\\uDF93';
// Used to compose unicode capture groups.
var astral = "[".concat(astralRange, "]");
var combo = "[".concat(comboRange, "]");
var fitz = '\\ud83c[\\udffb-\\udfff]';
var modifier = "(?:".concat(combo, "|").concat(fitz, ")");
var nonAstral = "[^".concat(astralRange, "]");
var regional = '(?:\\uD83C[\\uDDE6-\\uDDFF]){2}';
var surrogatePair = '[\\ud800-\\udbff][\\udc00-\\udfff]';
var zwj = '\\u200d';
var blackFlag = '(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40' +
'(?:\\udc65|\\udc73|\\udc77)\\udb40(?:\\udc6e|\\udc63|\\udc6c)\\udb40(?:\\udc67|\\udc74|\\udc73)\\udb40\\udc7f)';
var family = "[".concat(familyRange, "]");
// Used to compose unicode regexes.
var optModifier = "".concat(modifier, "?");
var optVar = "[".concat(varRange, "]?");
var optJoin = "(?:".concat(zwj, "(?:").concat([nonAstral, regional, surrogatePair].join('|'), ")").concat(optVar + optModifier, ")*");
var seq = optVar + optModifier + optJoin;
var nonAstralCombo = "".concat(nonAstral).concat(combo, "?");
var symbol = "(?:".concat([nonAstralCombo, combo, regional, surrogatePair, astral, family].join('|'), ")");
// Used to match [String symbols](https://mathiasbynens.be/notes/javascript-unicode).
return new RegExp("".concat(blackFlag, "|").concat(fitz, "(?=").concat(fitz, ")|").concat(symbol + seq), 'g');
}
function clearAndUpper(text) {
return text.replace(/-/, '').toUpperCase();
}