2015-11-19 3 views
2

Я прошел аналогичные записи, но ни один из них не обрабатывал этот конкретный случай. Я хочу преобразовать некоторые старые соглашения об именах в случай, подобный верблюду. Тем не менее, я хочу, преобразование должно быть ограничено только следующее:Регулярное выражение или другой способ преобразования в верблюжий случай в JavaScript

строка (состоящий из алфавитов в любом случае или цифр), а затем подчеркивания сопровождаемого алфавита должен быть заменен той же строки, а затем тот же алфавит, но только тот алфавит в верхнем регистре. Больше ничего.

Некоторые примеры:

aXc9tu_muKxx -> aXc9tuMuKxx 
zdmmpFmxf  -> zdmmpFmxf //unchanged 
_xfefx  -> _xfefx //unchanged 
Z_9fefx  -> Z9fefx //EDITED after getting answers. 

Так что, если? в регулярном выражении означало 1 или более случаев, а [] использовался для указания диапазона символов, тогда я бы предположил, что исходное выражение будет: ([0-9a-zA-Z])? _ ([0- 9a-Za-Z])?

Я открыт для использования Javascript или любого инструмента Linux. Повторяю еще раз, что преобразование будет включать только два символа _ и буква, сразу после него, если это действительно письмо. _ Будет удалена, и письмо будет обложено. Если это не буква, а цифра, то только подчеркивание будет удалено.

Цель состоит в том, чтобы двигаться к корпусу верблюда, но поддерживать читаемость старых соглашений об именах, где читаемость может быть скомпрометирована после преобразования. Например, THIS_IS_A_CONSTANT не может быть изменен для THISISACONSTANT.

ответ

7

Вы можете использовать Replacement callback:

function toCamelCase(str) { 
    return str.replace(/(?!^)_([a-z])/g, function(matches) { 
    return matches[1].toUpperCase(); 
    }); 
} 

Объяснение регулярное выражение:

(?!^) - не совпадают в начале строки (ваш "_xfefx" пример)
_ - соответствует подчеркивание (ДУХ ...)
([a-z]) - соответствует одной строчной букве и группе захвата в группе 1, matches[1]
/.../g - «глобальное» соответствие, т.е. заменяет не только первое, но и все вхождения

+2

Это не «жадное» соответствие, это «глобальное» соответствие. –

+0

@LeanAdler. Да, это работает так, как ожидалось. НЕ конвертирует все заглавные буквы, как в MY_CONSTANT_CONFIG, что приятно, хотя и не указано мной. Преобразование сделало бы его нечитаемым. Кроме того, обрабатывает несколько вхождений, как в xx_xAc_atx9. Я принимаю ответ. Можете ли вы немного изменить его, чтобы обрабатывать такие случаи, как xxx_9xxx, где будет удалено только _ _? Я отредактировал мой вопрос, поскольку пример был неправильным. Благодаря! – Sam

+1

@Samir просто добавляет допустимые символы в класс. т.е.: изменить '[az]' на '[a-z0-9]' – Mariano