Преобразовать строку в дело позвоночника - PullRequest
0 голосов
/ 02 апреля 2019

Challenge: конвертировать строку в регистр позвоночника. Спинальный регистр - все строчные слова, соединенные черточками

function spinalCase(str) {
  var res = str.replace(/\s/g, "-")
  var result = res.replace(/_/g, '').toLowerCase();
  return result;
}

Код работает, только если между строками есть пробелы или нет подчеркивания. Я застрял, пытаясь пройти остальные тесты, у кого-нибудь еще есть какие-либо советы или идеи?

spinalCase("This Is Spinal Tap") should return "this-is-spinal-tap".
spinalCase("thisIsSpinalTap") should return "this-is-spinal-tap".
spinalCase("The_Andy_Griffith_Show") should return "the-andy-griffith-show".
spinalCase("Teletubbies say Eh-oh") should return "teletubbies-say-eh-oh".
spinalCase("AllThe-small Things") should return "all-the-small-things".

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вы можете удалить все не алфавитно-цифровые символы в начале / конце строки, заменить эти последовательные символы на - где-либо еще, затем вы можете вставить дефис между строчными и заглавными буквами, а затем повернуть все в нижний регистр.

function spinalCase(str) {
  return str.replace(/^[\W_]+|[\W_]+$|([\W_]+)/g, function ($0, $1) {
              return $1 ? "-" : "";
         }).replace(/([a-z])(?=[A-Z])/g, '$1-').toLowerCase();
}

console.log(spinalCase("This Is Spinal Tap")); // "this-is-spinal-tap".
console.log(spinalCase("thisIsSpinalTap")); // "this-is-spinal-tap".
console.log(spinalCase("The_Andy_Griffith_Show")); // "the-andy-griffith-show".
console.log(spinalCase("Teletubbies say Eh-oh")); //"teletubbies-say-eh-oh".
console.log(spinalCase("AllThe-small Things")); // "all-the-small-things".

Подробнее

  • .replace(/^[\W_]+|[\W_]+$|([\W_]+)/g, function ($0, $1) { return $1 ? "-" : ""; }) - удаляет все не алфавитно-цифровые символы в начале (^[\W_]+) / конце ([\W_]+$) строки, заменяя эти последовательные символы на - где-либо еще (([\W_]+))
  • .replace(/([a-z])(?=[A-Z])/g, '$1-') - вставить дефис между строчными и заглавными буквами.
0 голосов
/ 02 апреля 2019

Ответ на этот версия вопроса : когда во входной строке используется верблюд , тогда нам не нужен словарь и мы можем использовать только регулярное выражение:

let s="exampleStringTwoThe-smallThing";

let r=s.replace(/([A-Z][a-z\-]*)/g, ' $1');

console.log(r);

Для текущей версии вопроса:

s.replace(/( |_)+/g,'-').replace(/([a-z])(?=[A-Z])/g, '$1-').toLowerCase()

function spinalCase(s) {
  return s.replace(/( |_)+/g,'-').replace(/([a-z])(?=[A-Z])/g, '$1-').toLowerCase();
}

console.log( spinalCase("This Is Spinal Tap") ) // should return "this-is-spinal-tap".
console.log( spinalCase("thisIsSpinalTap") ) // should return "this-is-spinal-tap".
console.log( spinalCase("The_Andy_Griffith_Show") ) // should return "the-andy-griffith-show".
console.log( spinalCase("Teletubbies say Eh-oh") ) // should return "teletubbies-say-eh-oh".
console.log( spinalCase("AllThe-small Things") ) // should return "all-the-small-things".

Я улучшаю решение, удаляя на replace, используя Wiktor answer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...