Подтвердить что ты не робот

Вставить пробел перед прописными буквами

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

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

4b9b3361

Ответ 1

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

s = s.replace(/([A-Z])/g, ' $1').trim()

Ответ 2

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

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

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

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

Ответ 3

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

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 (и используют некоторые аббревиатуры для некоторых вещей)

Ответ 4

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

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

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

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

http://jsfiddle.net/uXy64/

Ответ 6

Вы можете использовать String#split() и предварительный просмотр для заглавной буквы ([AZ]), а затем Array#join() для массива с пробелом:

let stringCamelCase = "MySites";

let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");

console.log(string)

Ответ 7

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

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

Вы можете проверить больше о взгляде позади (?<!^) Здесь.

Ответ 8

Вот что я использовал для преобразования строки в регистр заголовков, основываясь на нескольких ответах:

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/


Примеры:

  • "yourStringHere" → "Ваша строка здесь"
  • "AnotherStringHere" → "Другая строка здесь"
  • "someones_string" → "Someones String"
  • "Another-String-Here" → "Другая строка здесь"
  • "myAWESOMEString" → "Моя УДИВИТЕЛЬНАЯ строка"