2017-04-07 20 views
-1

这是我使用的语法:使用正则表达式分隔camelCase - 我如何包含特殊字符?

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

此代码可以帮助我把“驼峰”变成“驼峰”。我也尝试做很多其他的事情,比如用'+'来替换多余的空格。我也用'asdf'替换;然后切掉第一个;和第一个空间。

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

I BELIEVE IT GENERATES OUTPUT LIKE THIS: 

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

请帮帮我。

+3

请添加输入字符串 – Tushar

+0

好吧。我用示例输入/输出添加了我的整个正则表达式。 – Spacemoose

+2

该输入不是camelCase。 –

回答

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

+0

@Tushar用OP的字符串更新了我的代码片段。如果有任何错误,请指出。 :-) – Rajesh

+1

建议添加关于[ECMA-402](http://ecma-international.org/ecma-402/3.0/index.html)的注释并使用'toLocaleUpperCase'(如果可用)。我相信,德国人特别重要。 –

相关问题