JavaScript/jQuery: Разбить строку в camelCase и заменить пробел на дефис
Описание проблемы:
Я предполагаю, что это может быть многоступенчатая задача с использованием регулярных выражений. Как мне разбить строку в camelCase на части, превращая заглавные буквы в строчные, и добавляя дефис между каждой новой строкой?
Пример:
Исходная строка:
thisString
В результате должна получиться:
this-string
Надеюсь на помощь сообщества!
5 ответ(ов)
Попробуйте что-то вроде этого:
var myStr = 'thisString';
myStr = myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
Этот код осуществляет замену каждой пары символов, где маленькая буква предшествует заглавной, вставляя между ними дефис. Затем он переводит всю строку в нижний регистр. Убедитесь, что строка изначально задана в правильном формате.
Поздно отвечаю, но это решение подойдет для случаев, когда одна буква написана в camelCase.
'thisIsATest'.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase(); // this-is-a-test
Этот код использует регулярное выражение для замены положений, где строчная буква предшествует заглавной, добавляя между ними дефис. Затем, используя toLowerCase()
, он преобразует всю строку в нижний регистр. Таким образом, результатом будет строка в формате "this-is-a-test".
Попробуйте следующее решение:
var token = document.getElementsByTagName('strong')[0].innerHTML,
replaced = token.replace(/[a-z][A-Z]/g, function(str, offset) {
return str[0] + '-' + str[1].toLowerCase();
});
alert(replaced);
Пример - http://jsfiddle.net/7DV6A/2/
Для получения дополнительной информации о функции replace
в строках, вы можете ознакомиться с документацией:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace
Если у вас возникли вопросы по этому коду или вы хотите узнать что-то конкретное, не стесняйтесь спрашивать!
Вы можете использовать следующий код для преобразования строк из формата CamelCase в формат с дефисами (kebab-case):
String.prototype.camelCaseToDashed = function() {
return this.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
// Применение
"SomeVariable".camelCaseToDashed(); // "some-variable"
В этом коде мы добавляем метод camelCaseToDashed
к прототипу объектов String
. Метод использует регулярное выражение для поиска мест, где маленькая буква передается большой буквой, и добавляет дефис между ними, после чего преобразует всю строку в нижний регистр.
Таким образом, при вызове "SomeVariable".camelCaseToDashed()
вы получите строку "some-variable"
.
Я не понимаю, почему все эти решения такие сложные, но я просто нашел, что вот этого достаточно:
function camelCaseToDash(input){
// заменяем заглавные буквы на букву + дефис: '-', а затем приводим все к нижнему регистру.
return input.replace(/([A-Z])/g, '-$1').toLowerCase();
}
// Или, используя функцию обратного вызова, сразу преобразуем в нижний регистр.
function camelCaseToDashCallback(input){
// заменяем заглавную букву на строчную + дефис '-'.
return input.replace(/([A-Z])/g, (x)=> "-"+ x.toLowerCase());
}
В целом, первый вариант работает быстрее, вот ссылка для проверки: https://jsfiddle.net/4557z/17/
Как разделить строку с несколькими разделителями в JavaScript?
Как преобразовать строку, разделённую запятыми, в массив?
Как разделить строку, разбивая её по определенному символу?
Как удалить все переносы строк из строки
Удаление всего, кроме чисел, из строки