[英]Convert sentence or camelCase word to spinal-case
我试图将判决案件和骆驼案件转换为脊柱病例。
我能够通过在每个大写字母之前添加一个空格来改变驼峰的情况,但是当我将它应用于空格后的大写字母的句子时,我得到额外的间距。
到目前为止,这是我的功能:
function spinalCase(str) {
var noCamel = str.replace(/([A-Z])/g, ' $1');
var newStr = noCamel.replace(/\s|_/g, "-");
return newStr.toLowerCase();
}
spinalCase("makeThisSpinal"); //returns make-this-spinal
spinalCase("Make This Spinal"); //returns -make--this--spinal
获取lodash,具体来说, 请访问https://lodash.com/docs#kebabCase 。
_.kebabCase('makeThisSpinal') // make-this-spinal
_.kebabCase('Even Sentences Work') // even-sentences-work
代替:
var noCamel = str.replace(/([A-Z])/g, ' $1');
尝试:
var noCamel = str.replace(/(\B[A-Z])/g, ' $1');
这是因为你用空格和小写字母替换所有大写字母。 所以在你的句子中,你在this
之前得到两个空格并且spinal
。
你可以做的是用"-$1"
替换所有大写字母,然后从字符串中删除所有空格。
function spinalCase(str) {
var noCamel = str.replace(/([a-z](?=[A-Z]))/g, '$1 ')
var newStr = noCamel.replace(/\s|_/g, "-");
return newStr.toLowerCase();
}
spinalCase("makeThisSpinal"); //returns make-this-spinal
spinalCase("Make This Spinal"); //returns -make-this-spinal
对于驼峰案例拆分而不是str.replace(/([AZ])/g, ' $1')
,你应该使用str.replace(/([az](?=[AZ]))/g, '$1 ')
无论如何都会将每个单词分开。
这是我的解决方案,也许你会发现它很好的参考:
function spinalCase(str) {
var newStr = str[0];
for (var j = 1; j < str.length; j++) {
// if not a letter make a dash
if (str[j].search(/\W/) !== -1 || str[j] === "_") {
newStr += "-";
}
// if a Capital letter is found
else if (str[j] === str[j].toUpperCase()) {
// and preceded by a letter or '_'
if (str[j-1].search(/\w/) !== -1 && str[j-1] !== "_") {
// insert '-' and carry on
newStr += "-";
newStr += str[j];
}
else {
newStr += str[j];
}
}
else {
newStr += str[j];
}
}
newStr = newStr.toLowerCase();
return newStr;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.