Javascript 将句子或大小写转换为大小写
我试着把句子格和驼峰格都转换成脊柱格 通过在每个大写字母前添加空格,我可以将camel大小写改为,但当我将其应用于空格后带有大写字母的句子时,我得到了额外的空格 以下是我目前的功能:Javascript 将句子或大小写转换为大小写,javascript,regex,Javascript,Regex,我试着把句子格和驼峰格都转换成脊柱格 通过在每个大写字母前添加空格,我可以将camel大小写改为,但当我将其应用于空格后带有大写字母的句子时,我得到了额外的空格 以下是我目前的功能: function spinalCase(str) { var noCamel = str.replace(/([A-Z])/g, ' $1'); var newStr = noCamel.replace(/\s|_/g, "-"); return newStr.toLowerCase();
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
这是因为你用空格及其小写字母替换了所有大写字母。在你的句子中,
this
和spinal
前面有两个空格
您可以做的是将所有大写字母替换为“-$1”
,然后删除字符串中的所有空格。获取lodash,特别是
而不是:
var noCamel = str.replace(/([A-Z])/g, ' $1');
尝试:
函数spinalCase(str){
var noCamel=str.replace(/([a-z](?=[a-z]))/g,“$1”)
var newStr=noCamel.replace(/\s | g/g,“-”);
return newStr.toLowerCase();
}
菠菜酶(makethispinalcase)//这是我的脊骨
脊柱酶(“使其成为脊柱”)//返回-使这个脊椎
不要使用str.replace(/([A-Z])/g,$1')进行驼峰大小写拆分,而应该使用
str.replace(/([A-Z](?=[A-Z]))/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;
}
函数spinalCase(str){
var newStr=str[0];
对于(var j=1;j
您能否再突出一些示例,说明您希望该函数做什么?将第二个示例视为您想要的东西而不是您试图避免的东西时,我感到困惑。您可以使用-var newStr=noCamel.replace(/\s+|u+/g,“-”)代替您的var newStr;它将省去额外的空格,但您必须考虑“特殊情况”,如OP:\B“匹配零宽度非单词边界,如两个字母之间或两个空格之间。”的第一个单词中的大写字母作为参考。请参阅:
var noCamel = str.replace(/(\B[A-Z])/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;
}