用正则表达式改变大小写

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

Regex demo

匹配

  • ([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"));