用正则表达式改变大小写
change case with regex
我要转换此文本
font-size-18
到这个
fontSize18
使用正则表达式。这是我的足迹:
let conv = str => str.replace(/\-[a-z]/gi,/[A-Z]/gi);
但它不起作用,我可以在没有正则表达式的情况下做到这一点。但是我想用正则表达式来做,这可以用正则表达式来完成吗?
匹配破折号后跟单个字符,并使用 returns 该字符 toUpperCase
:
的替换函数
const dashToCamel = str => str.replace(/-(\w)/g, (_, g1) => g1.toUpperCase());
console.log(dashToCamel("font-size-18"));
这假定所有破折号后跟单词字符(尽管您可以使用 .
而不是 \w
)。请注意,由于看起来您想要替换 所有 破折号,因此您应该匹配并替换所有破折号,而不仅仅是破折号后跟字母字符。
echo font-size-18 | sed "s/-s/S/g" | sed "s/-1/1/g"
您的替换函数使用 -[a-z]
,它只会匹配 -s
,并且会 replace 匹配 /[A-Z]/gi
。
您可以使匹配更具体一些,以捕获捕获组中没有破折号的所有部分,并对捕获 s
的组(第 2 组)使用 toUpperCase
([a-z]+)-([a-z])([a-z]*)-(\d+)
匹配
([a-z]+)
捕获 1+ 次 a-z 到组 1
-
字面匹配
([a-z])
将单个 a-z 捕获到组 2
([a-z]*)
捕获 0+ 次 a-z 到组 3
-
字面匹配
(\d+)
将 1+ 个数字捕获到第 4 组
const conv = str => str.replace(
/([a-z]+)-([a-z])([a-z]*)-(\d+)/g,
(_, p1, p2, p3, p4) => p1 + p2.toUpperCase() + p3 + p4
);
console.log(conv("font-size-18"));
我要转换此文本
font-size-18
到这个
fontSize18
使用正则表达式。这是我的足迹:
let conv = str => str.replace(/\-[a-z]/gi,/[A-Z]/gi);
但它不起作用,我可以在没有正则表达式的情况下做到这一点。但是我想用正则表达式来做,这可以用正则表达式来完成吗?
匹配破折号后跟单个字符,并使用 returns 该字符 toUpperCase
:
const dashToCamel = str => str.replace(/-(\w)/g, (_, g1) => g1.toUpperCase());
console.log(dashToCamel("font-size-18"));
这假定所有破折号后跟单词字符(尽管您可以使用 .
而不是 \w
)。请注意,由于看起来您想要替换 所有 破折号,因此您应该匹配并替换所有破折号,而不仅仅是破折号后跟字母字符。
echo font-size-18 | sed "s/-s/S/g" | sed "s/-1/1/g"
您的替换函数使用 -[a-z]
,它只会匹配 -s
,并且会 replace 匹配 /[A-Z]/gi
。
您可以使匹配更具体一些,以捕获捕获组中没有破折号的所有部分,并对捕获 s
([a-z]+)-([a-z])([a-z]*)-(\d+)
匹配
([a-z]+)
捕获 1+ 次 a-z 到组 1-
字面匹配([a-z])
将单个 a-z 捕获到组 2([a-z]*)
捕获 0+ 次 a-z 到组 3-
字面匹配(\d+)
将 1+ 个数字捕获到第 4 组
const conv = str => str.replace(
/([a-z]+)-([a-z])([a-z]*)-(\d+)/g,
(_, p1, p2, p3, p4) => p1 + p2.toUpperCase() + p3 + p4
);
console.log(conv("font-size-18"));