Как преобразовать строку PascalCase
в строку underscore_case
? Мне также нужно преобразовать точки, чтобы подчеркнуть.
например. конвертировать
TypeOfData.AlphaBeta
в
type_of_data_alpha_beta
Как преобразовать строку PascalCase
в строку underscore_case
? Мне также нужно преобразовать точки, чтобы подчеркнуть.
например. конвертировать
TypeOfData.AlphaBeta
в
type_of_data_alpha_beta
Вы можете попробовать следующие шаги.
Захват всех прописных букв и совпадение с предыдущим необязательным символом точки.
Затем преобразуйте захваченные прописные буквы в нижний регистр, а затем верните назад, чтобы заменить функцию символом _
, как предыдущий символ. Это будет достигнуто с помощью анонимной функции в заменяемой части.
Это заменит начальную заглавную букву на _
+ 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(/^_/, ""));
str.split(/(?=[A-Z])/).join('_').toLowerCase();
приветствуем
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);
Альтернативно, используя lodash:
lodash.snakeCase(str);
Пример:
_.snakeCase('TypeOfData.AlphaBeta');
// ➜ 'type_of_data_alpha_beta'
Lodash - это прекрасная библиотека, которая дает ярлык для многих повседневных js-задач. Существует много других подобных функций манипуляции строкой, таких как camelCase
, kebabCase
и т.д.
Это даст вам довольно далеко: https://github.com/domchristie/humps
Вам, вероятно, придется использовать замену регулярного выражения, чтобы заменить ".". с подчеркиванием.
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;
}
Попробуйте эту функцию, надеюсь, что это поможет.
Я перенес код в 1175208 с Python на JavaScript.
function camelToSnakeCase(text) {
return text.replace(/(.)([A-Z][a-z]+)/, '$1_$2').replace(/([a-z0-9])([A-Z])/, '$1_$2').toLowerCase()
}
camelToSnakeCase('thisISDifficult') -> this_is_difficult
camelToSnakeCase('thisISNT') -> this_isnt
camelToSnakeCase('somethingEasyLikeThis') -> something_easy_like_this
"TestString".replace(/[A-Z]/g, val => "_" + val.toLowerCase()).replace(/^_/,"")
заменяет все прописные буквы подчеркиванием и строчными, затем удаляет начальное подчеркивание.
"alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma
Проблема - Необходимо преобразовать строку с верблюжьим регистром (например, имя свойства) в стиль подчеркивания для соответствия требованиям интерфейса или для метапрограммирования.
Пояснение. В этой строке используется функция регулярных выражений, где она может возвращать совпадающий результат (первая пара() равна $1
, вторая - $2
и т.д.).
Каждое совпадение в строке преобразуется, чтобы иметь подчеркивание перед строкой _$1
. В этот момент строка выглядит как alpha_Beta_Gamma
.
Чтобы исправить заглавные буквы, вся строка преобразуется в LowCase().
Поскольку toLowerCase является довольно дорогой операцией, лучше не помещать ее в обработчик цикла для каждого случая сопоставления, а запускать один раз для всей строки.
После toLowerCase
строка alpha_beta_gamma
(в этом примере)