使用RegEx分隔camelCase - 我如何包含特殊字符?

时间:2017-04-07 11:39:14

标签: javascript regex

这是我正在使用的语法:

.split(' ')
.join('+')
.replace(/([A-Z])/g, ' $1')
.replace(/^./, function(str) {
    return str.toUpperCase();
})
.replace(/\++/g, '')
.replace(/asdf/g, ';')
.replace(';', '')
.replace(' ', '')
.split(';');

此代码帮助我将'camelCase'变成'Camel Case'。我还尝试做其他各种事情,比如通过'+'用一个空格替换多余的空间。我也用'asdf'代替;然后切开第一个;和第一个空间。

问题:与此同时,它打破了我的德国特色,即ÄÖÜ。在我的输出中将它们变成问号。

I BELIEVE IT GENERATES OUTPUT LIKE THIS:

input: ... Oberbayern:Kreis EichstättAsdf ...
output: ... Oberbayern: Kreis Eichst�tt; Asdf ...

请帮帮我。

1 个答案:

答案 0 :(得分:4)

您可以尝试这样的事情:

<强>逻辑

  • 检查是否有小字符,后跟大写字符。
  • 通过添加空间来替换它。
  • 现在将第一个字符设为大写

注意:正如T.J. Crowder所指出的,如果可以的话,最好使用string.toLocaleUpperCase

function seperateCamelCaseWords(a) {
  var regex = /([a-z])(?=[A-Z])/g;

  a = a.replace(regex, "$1 ");
  a = upper(a.charAt(0)) + a.substring(1)
  console.log(a)
  return a;
}

function upper(str){
  return str.toLocaleUpperCase ? str.toLocaleUpperCase() : str.toUpperCase();
}

var a = "thisIsTestString";
var b = "kreisEichstätt"

seperateCamelCaseWords(a);
seperateCamelCaseWords(b);

您还可以使用以下逻辑来匹配除空格后跟任何字符的任何字符。

function seperateCamelCaseWords(a) {
  var regex = /([^ ])(?=[A-Z])/g;
  a = a.replace(regex, "$1 ");
  a = upper(a.charAt(0)) + a.substring(1)
  console.log(a)
  return a;
}

function upper(str){
  return str.toLocaleUpperCase ? str.toLocaleUpperCase() : str.toUpperCase();
}

seperateCamelCaseWords("thisIsATestString");
seperateCamelCaseWords("kreisEichstätt");
seperateCamelCaseWords("kreisäEichstätt")