2015-05-29 9 views
26

Come convertire la stringa PascalCase nella stringa underscore_case? Ho bisogno anche della conversione dei punti per sottolineare.Javascript convert PascalCase a underscore_case

es. convertire

TypeOfData.AlphaBeta 

in

type_of_data_alpha_beta 
+0

Prova questo link compagno che ti aiuta di sicuro http://jamesroberts.name/blog/2010/02/22/string- funzioni-per-javascript-trim-to-camel-case-to-dashed-e-to-underscore/ – Santhucool

risposta

46

Si potrebbe provare i passaggi di seguito.

  • Cattura tutte le lettere maiuscole e corrisponde anche al carattere punto precedente precedente.

  • Quindi convertire le lettere maiuscole acquisite in minuscolo e quindi tornare indietro per sostituire la funzione con un _ come carattere precedente. Questo sarà ottenuto utilizzando la funzione anonima nella parte di ricambio.

  • Ciò sostituirà la lettera maiuscola iniziale a _ + lettera minuscola.

  • Infine, la rimozione del trattino basso iniziale ti darà l'output desiderato.

    var s = 'TypeOfData.AlphaBeta'; 
    console.log(s.replace(/(?:^|\.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, "")); 
    

O

var s = 'TypeOfData.AlphaBeta'; 
 
alert(s.replace(/\.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

alcun modo per fermarlo quando un'intera parola è in maiuscolo. per esempio. MotorRPM in motor_rpm anziché motor_r_p_m? oppure BatteryAAA in battery_aaa anziché battery_a_a_a?

var s = 'MotorRMP'; 
 
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

+0

Grazie, un modo per fermarlo quando una parola intera è in maiuscolo. per esempio. 'MotorRMP' in' motor_rpm' invece di 'motor_r_p_m'? o 'BatteryAAA' in' battery_aaa' invece di 'battery_a_a_a'. – zahmati

+1

'alert (s.replace (/ \.? ([AZ] +)/g, function (x, y) {return" _ "+ y.toLowerCase()}). Replace (/^_ /," ")); ' –

1
function toCamelCase(s) { 
    // remove all characters that should not be in a variable name 
    // as well underscores an numbers from the beginning of the string 
    s = s.replace(/([^a-zA-Z0-9_\- ])|^[_0-9]+/g, "").trim().toLowerCase(); 

    // uppercase letters preceeded by a hyphen or a space 
    s = s.replace(/([ -]+)([a-zA-Z0-9])/g, function(a,b,c) { 
    return c.toUpperCase(); 
    }); 

    // uppercase letters following numbers 
    s = s.replace(/([0-9]+)([a-zA-Z])/g, function(a,b,c) { 
    return b + c.toUpperCase(); 
    }); 

    return s; 
} 

Prova questa funzione, spero che aiuta.

+3

Non è sbagliato nella direzione? 'CamelToUnderscore' è necessario. – zahmati

17

alternativa usando lodash:

lodash.snakeCase(str); 

Esempio:

_.snakeCase('TypeOfData.AlphaBeta'); 
// ➜ 'type_of_data_alpha_beta' 

Lodash è una bella biblioteca che invia scorciatoia per molti giorni js tasks.There sono molte altre funzioni simili manipolazione delle stringhe come camelCase, kebabCase ecc.

+1

Wow grazie per questo, stavo usando il mio toSnakeCase, toTitleCase (_. StartCase), toCamelCase. Grazie a questo ora sono passato a lodash e funziona molto meglio del mio! Non avevo idea che lodash avesse questo! – Noitidart

13
str.split(/(?=[A-Z])/).join('_').toLowerCase(); 

u 'ammessi

var s1 = 'someTextHere'; 
 
var s2 = 'SomeTextHere'; 
 

 
var o1 = s1.split(/(?=[A-Z])/).join('_').toLowerCase(); 
 
var o2 = s2.split(/(?=[A-Z])/).join('_').toLowerCase(); 
 

 
console.log(o1); 
 
console.log(o2);

+0

Semplice, mi piace – Ced

Problemi correlati