
Это из моей коллекции однострочников JavaScript. Однострочники — это элегантный и выразительный способ написания легко понятного и поддерживаемого кода. JavaScript превратился в чрезвычайно выразительный и элегантный язык программирования. Научитесь использовать современные функции языка для достижения своих целей программирования. Это будет приятный и в то же время полезный опыт.
1. Преобразуйте многосегментное имя змеиного регистра в верблюжий регистр.
Я видел много подробных фрагментов JavaScript для преобразования строк в змеином регистре в верблюжий. Например, следующая строка:
SNAKE_casE
должно выглядеть так после преобразования:
snakeCase
Строка case case может состоять из нескольких сегментов, как показано ниже:
SNAKE_casE___WITH_muLtiPLE_SEGments
Приведенная ниже однострочная строка должна работать для любой строки с регистром змеи — даже с несколькими сегментами:
let str = 'SNAKE_casE___WITH_muLtiPLE_SEGments';
'SNAKE_casE___WITH_muLtiPLE_SEGments'.toLowerCase().replace(/_+(.)/g,
(m, g1) => {return g1.toUpperCase()}
);
Результат: ’snakeCaseWithMultipleSegments’
Сначала он преобразует всю строку в нижний регистр. Затем сканирует строку на наличие символов подчеркивания, за которыми следует одиночный символ (.), и глобально заменяет эти вхождения символом, следующим за символом подчеркивания, в верхнем регистре. Обратите внимание, что мы передаем функцию в качестве второго аргумента функции replace(). Если вторым аргументом replace() является функция, она может принимать соответствие и группы захвата в качестве аргументов и вернуть значение для замены соответствия. Полное описание смотрите в справке.
2. Сложите длинную строку в длинные строки по 80 символов, не разбивая слова.
Задача здесь состоит в том, чтобы обернуть текст после каждого 80-го символа. Если 80-й символ находится внутри слова, перенос после окончания слова.
Способ 1
const longLine = `This is a long line that needs to be folded \
into lines not more than 80 characters long \
without breaking words.`;
console.log(longLine.replace(/([^\n\r]{80})\s+/g…