У меня есть веревочка "MySites"
. Я хочу поставить пробел между My
и Sites
.
Как я могу сделать это в jQuery или JavaScript?
У меня есть веревочка "MySites"
. Я хочу поставить пробел между My
и Sites
.
Как я могу сделать это в jQuery или JavaScript?
Ответы:
Вы можете просто добавить пробел перед каждым символом верхнего регистра и обрезать начальные и конечные пробелы
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. + Гарантирует, что вы сопоставите как можно больше последовательных заглавных букв.
Это найдет каждое вхождение символа нижнего регистра, за которым следует символ верхнего регистра, и вставит между ними пробел:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Для особых случаев, когда встречаются 2 последовательные заглавные буквы (например, ThisIsATest), добавьте дополнительный код ниже:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
Могу я предложить небольшое изменение принятого в настоящее время ответа:
function insertSpaces(string) {
string = string.replace(/([a-z])([A-Z])/g, '$1 $2');
string = string.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
return string;
}
Это значит, что:
ACROText -> ACRO Text
UserNameTest -> User Name Test
Что может быть немного полезнее, если вы имеете дело с именами столбцов db (и используете аббревиатуры для некоторых вещей)
Это должно вставить пробел между каждой заглавной буквой, которому не предшествовала заглавная буква.
var myString = "MySites"
var newString = "";
var wasUpper = false;
for (var i = 0; i < myString.length; i++)
{
if (!wasUpper && myString[i] == myString.toUpperCase()[i])
{
newString = newString + " ";
wasUpper = true;
}
else
{
wasUpper = false;
}
newString = newString + myString[i];
}
newString
будет иметь желаемую ценность. Кроме того, если вы хотите сократить свой код с помощью регулярного выражения, вы можете использовать следующий код из Javascript camelCase в Regular Form
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
регулярное выражение, чтобы найти нижний регистр - границу верхнего регистра, затем вставьте пробел
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
Вот что я в итоге использовал для преобразования строки в регистр заголовка, основываясь на нескольких ответах здесь:
str = str
.replace(/(_|-)/g, ' ')
.trim()
.replace(/\w\S*/g, function(str) {
return str.charAt(0).toUpperCase() + str.substr(1)
})
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
Вот JSFiddle, где вы можете проверить свою строку, чтобы узнать, соответствует ли она вашим потребностям: https://jsfiddle.net/thomastasa/5236dv8t/85/
Примеры:
Вы можете использовать String#split()
и заглавные буквы алфавита ( [A-Z]
), а затем Array#join()
массив с пробелом:
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
Или, как функция объекта String:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());
В одном регулярном выражении замена (без обрезки или объединения), которая позволяет использовать любой символ, а не только буквы [a-z]
или [A-Z]
.
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
Вы можете узнать больше об этом (?<!^)
здесь .