2015-05-29 3 views
26

Как преобразовать строку PascalCase в строку underscore_case? Мне нужно преобразовать точки, чтобы подчеркнуть.Javascript convert PascalCase to underscore_case

например. конвертировать

TypeOfData.AlphaBeta 

в

type_of_data_alpha_beta 
+0

Попробуйте эту ссылку дружище это поможет Вам наверняка http://jamesroberts.name/blog/2010/02/22/string- функции для javascript-trim-to-camel-case-to-pashed-and-to-underscore/ – Santhucool

ответ

46

Вы можете попробовать следующие шаги.

  • Захват всех прописных букв, а также совпадение с предыдущим необязательным символом точки.

  • Затем конвертируйте записанные прописные буквы в нижний регистр, а затем верните назад, чтобы заменить функцию _ как предыдущий символ. Это будет достигнуто с помощью анонимной функции в запасной части.

  • Это заменит начальную заглавную букву на _ + lowercase_letter.

  • Наконец, удаление начального подчеркивания даст вам желаемый результат.

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

ИЛИ

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

ли способ, чтобы остановить его, когда целое слово в верхнем регистре. например. MotorRPM в motor_rpm вместо motor_r_p_m? или BatteryAAA в battery_aaa вместо battery_a_a_a?

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

+0

Спасибо, любой способ остановить его, если целое слово находится в верхнем регистре. например. 'MotorRMP' в' motor_rpm' вместо 'motor_r_p_m'? или 'BatteryAAA' в' battery_aaa' вместо 'battery_a_a_a'. – zahmati

+1

'alert (s.replace (/ \.? ([AZ] +)/g, function (x, y) {return" _ "+ y.toLowerCase()}) заменить (/^_ /," ")); ' –

1

Это поможет вам довольно далеко: https://github.com/domchristie/humps

Вы, вероятно, придется использовать регулярное выражение замены для замены "" с подчеркиванием.

+1

почему downvote? – voondo

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; 
} 

Попробуйте эту функцию, надеюсь, что это помогает.

+3

Не так ли неправильно в направлении? 'CamelToUnderscore' необходим. – zahmati

17

В качестве альтернативы с помощью lodash:

lodash.snakeCase(str); 

Пример:

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

Lodash является прекрасной библиотекой, чтобы дать ярлык для многой повседневной JS tasks.There много других функций аналогична строка манипуляции, таких как camelCase, kebabCase и т. Д.

+1

Wow спасибо за это, я использовал свой собственный toSnakeCase, toTitleCase (_ startCase), toCamelCase. Благодаря этому я теперь переключился на lodash, и он работает намного лучше, чем мой! Я понятия не имел, что у lodash! – Noitidart

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

u're приветствовать

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

Простенький, нравится – Ced