Вставьте пробел перед заглавными буквами - PullRequest
78 голосов
/ 07 апреля 2011

У меня есть строка "MySites".Я хочу разместить пробел между My и Sites.

Как я могу сделать это в jQuery или JavaScript?

Ответы [ 7 ]

118 голосов
/ 07 апреля 2011

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

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

Для особых случаев, когда встречаются 2 последовательные заглавные буквы (например, ThisIsATest)добавьте дополнительный код ниже:

 s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
115 голосов
/ 22 августа 2014

Вы можете просто добавить пробел перед каждым заглавным символом и обрезать начальные и конечные пробелы

s = s.replace(/([A-Z])/g, ' $1').trim()
16 голосов
/ 17 декабря 2015

Могу ли я предложить небольшое редактирование принятого в настоящее время ответа:

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

Что может быть немного более полезно, если вы имеете дело с именами столбцов БД (и в некоторых случаях используете аббревиатуры)

6 голосов
/ 07 апреля 2011

Это должно вставить пробел между каждой заглавной буквой, которой не предшествовала заглавная буква.

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(); })
5 голосов
/ 07 апреля 2011

регулярное выражение, чтобы найти нижний регистр - верхний регистр границы, а затем вставить пробел

<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );

http://jsfiddle.net/uXy64/

1 голос
/ 13 августа 2018

Вы можете использовать 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());
0 голосов
/ 08 мая 2019

В одном регулярном выражении заменить (без обрезок или объединений), который допускает любой символ, а не только буквы [a-z] или [A-Z].

const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"

Подробнее об этом можно узнать (?<!^) здесь .

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