如何在 dart 中进行骆驼式判别

TSR*_*TSR 2 regex dart flutter

我的尝试出了点问题:

String camelToSentence(String text) {
  var result = text.replaceAll(RegExp(r'/([A-Z])/g'), r" $1");
  var finalResult = result[0].toUpperCase() + result.substring(1);
  return finalResult;
}

void main(){
  print(camelToSentence("camelToSentence"));
}
Run Code Online (Sandbox Code Playgroud)

它只是打印“CamelToSentence”而不是“Camel To Sentence”。

看起来问题就在这里r" $1";,但我不知道为什么。

Wik*_*żew 5

您可以使用

String camelToSentence(String text) {
  return text.replaceAllMapped(RegExp(r'^([a-z])|[A-Z]'), 
          (Match m) => m[1] == null ? " ${m[0]}" : m[1].toUpperCase());
}
Run Code Online (Sandbox Code Playgroud)

这里,

  • ^([a-z])|[A-Z]- 将字符串开头的小写 ASCII 字母匹配并捕获到组 1 中,或者仅匹配字符串中任意位置的大写字母
  • (Match m) => m[1] == null ? " ${m[0]}" : m[1].toUpperCase()返回大写组 1 值(如果匹配)或空格 + 匹配值作为替换。