2017-04-07 113 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'(如果可用)。我相信,德國人特別重要。 –

相關問題