У мене є струна "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 до регулярної форми
"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 Object:
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"
Ви можете переглянути більше про зовнішній вигляд (?<!^)
тут .