用正则表达式更改大小写

时间:2018-11-10 11:18:34

标签: regex uppercase lowercase camelcasing

我要转换此文本

font-size-18

对此

fontSize18

使用正则表达式。这是我的足迹:

let conv = str => str.replace(/\-[a-z]/gi,/[A-Z]/gi);

但是它不起作用,我不需要Regex就可以做到。但是我想用Regex做到这一点,可以使用regex完成吗?

3 个答案:

答案 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+)

Regex demo

那将匹配

  • ([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”