Не могли бы вы подробнее рассказать? Какую общую форму вы хотите разделить? Если это всего лишь одна строка, почему бы просто не вставить пробел вручную?
Pointy
2
Пожалуйста, будьте более точными, я не думаю, что кто-то может понять, о чем вы спрашиваете
Клемент Херреман
1
определите шаблон, которому он должен соответствовать, например, «пробел, когда он найдет 'My' в строке» или «добавить пробел перед каждым заглавным символом, если он не является первым символом», или ....
JohnSmith,
«между личными сайтами». Как разместить пробел между одной вещью? Я предполагаю, что вы хотите получить "Мои сайты".
Rocket Hazmat
#meagar - приятный комментарий (сарказм). разве вас никогда не учили, что если вам нечего сказать, то вообще ничего не говорите?
carinlynchin
Ответы:
175
Вы можете просто добавить пробел перед каждым символом верхнего регистра и обрезать начальные и конечные пробелы
Это также работает для "1AndAbove". Другого решения нет. Благодарность!!
One-One,
1
Он «не работает» для аббревиатур, как мы можем предотвратить его срабатывание, когда 2 или более последовательных заглавных буквы?
Тони Мишель Каубет
4
@ToniMichelCaubet легко, изменить регулярное выражение , как это: /([A-Z]+)/g. + Гарантирует, что вы сопоставите как можно больше последовательных заглавных букв.
iFreilicht
Почему в этом коде нужны круглые скобки, заключающие "[AZ]"?
Кристина Бресслер
1
@Kristina В скобках написано: «Я - переменная». Без круглых скобок это дает ответ «1y $ 1ites» для «MySites»
user2051552
128
Это найдет каждое вхождение символа нижнего регистра, за которым следует символ верхнего регистра, и вставит между ними пробел:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Для особых случаев, когда встречаются 2 последовательные заглавные буквы (например, ThisIsATest), добавьте дополнительный код ниже:
Просто предупреждение, это не для одиночных букв. «ThisIsATest» приведет к «This Is ATest».
Церера
3
@Ceres: Хороший вопрос. В этом случае можно было бы обработать, вместо этого вставив пробел перед любой заглавной буквой, которая не является первым символом, но у вас все еще есть случаи, которые не могут быть обработаны без распознавания слов, например "RunThisSQLQuery".
Guffa
1
для «ThisIsATest» - (не считая «RunThisSQLQuery») вы можете сделать это: str.replace (/ ([AZ]) / g, '$ 1'). trim ()
carinlynchin
Гениально! Благодарность!
Ами Шрайбер
24
Могу я предложить небольшое изменение принятого в настоящее время ответа:
Это отлично работает для того, что мне было нужно. Он отлично добавил пробел между заглавными буквами, но сохранил аббревиатуры вместе.
mighty_mite
6
Это должно вставить пробел между каждой заглавной буквой, которому не предшествовала заглавная буква.
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(); })
Ответы:
Вы можете просто добавить пробел перед каждым символом верхнего регистра и обрезать начальные и конечные пробелы
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; }
Это значит, что:
Что может быть немного полезнее, если вы имеете дело с именами столбцов 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") );
http://jsfiddle.net/uXy64/
источник
Вот что я в итоге использовал для преобразования строки в регистр заголовка, основываясь на нескольких ответах здесь:
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"
Вы можете узнать больше об этом
(?<!^)
здесь .источник