Подтвердить что ты не робот

Javascript конвертировать PascalCase в underscore_case

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

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

TypeOfData.AlphaBeta

в

type_of_data_alpha_beta
4b9b3361

Ответ 1

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

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

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

  • Это заменит начальную заглавную букву на _ + 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(/^_/, ""));

Ответ 2

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

Ответ 3

Альтернативно, используя lodash:

lodash.snakeCase(str);

Пример:

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

Lodash - это прекрасная библиотека, которая дает ярлык для многих повседневных js-задач. Существует много других подобных функций манипуляции строкой, таких как camelCase, kebabCase и т.д.

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Это решение решает проблему нетронутой аббревиатуры с решениями выше

Я перенес код в 1175208 с Python на JavaScript.

Код 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

Ответ 7

"TestString".replace(/[A-Z]/g, val => "_" + val.toLowerCase()).replace(/^_/,"")

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

Ответ 8

"alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma

Проблема - Необходимо преобразовать строку с верблюжьим регистром (например, имя свойства) в стиль подчеркивания для соответствия требованиям интерфейса или для метапрограммирования.

Пояснение. В этой строке используется функция регулярных выражений, где она может возвращать совпадающий результат (первая пара() равна $1, вторая - $2 и т.д.).

Каждое совпадение в строке преобразуется, чтобы иметь подчеркивание перед строкой _$1. В этот момент строка выглядит как alpha_Beta_Gamma.

Чтобы исправить заглавные буквы, вся строка преобразуется в LowCase().

Поскольку toLowerCase является довольно дорогой операцией, лучше не помещать ее в обработчик цикла для каждого случая сопоставления, а запускать один раз для всей строки.

После toLowerCase строка alpha_beta_gamma (в этом примере)