我要转换此文本
font-size-18
对此
fontSize18
使用正则表达式。这是我的足迹:
let conv = str => str.replace(/\-[a-z]/gi,/[A-Z]/gi);
但是它不起作用,我不需要Regex就可以做到。但是我想用Regex做到这一点,可以使用regex完成吗?
答案 0 :(得分:1)
匹配破折号后跟一个字符,并使用替换函数返回该字符toUpperCase
:
const dashToCamel = str => str.replace(/-(\w)/g, (_, g1) => g1.toUpperCase());
console.log(dashToCamel("font-size-18"));
这假定所有破折号后面都带有文字字符(尽管您可以使用.
代替\w
)。请注意,由于您似乎要替换 all 破折号,因此您应该匹配并替换所有破折号,而不仅仅是破折号和字母字符。
答案 1 :(得分:1)
您的替换功能使用-[a-z]
,它将仅与-s
匹配,而将replace与/[A-Z]/gi
匹配。
您可以使匹配更为具体,以捕获捕获组中所有不带破折号的部分,并为捕获s
的组(组2)使用toUpCase
([a-z]+)-([a-z])([a-z]*)-(\d+)
那将匹配
([a-z]+)
将a-z捕获1次以上到组1 -
字面上匹配([a-z])
将单个a-z捕获到组2 ([a-z]*)
将a-z捕获0次以上到组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"));
答案 2 :(得分:-1)
echo font-size-18 | sed“ s / -s / S / g” | sed“ s / -1 / 1 / g”