var str='The_Andy_Griffith_Show'; // string to perform replace on
var regExp1=/\s|[A-Z]/g;
var regExp2=/[^A-Z]/g; // regular expression
var str2 =str.replace(regExp2,regExp1);
// expected output: The_ Andy_ Griffith_ Show
Я хочу заменить все первые заглавные буквы строки пробелом и той же буквой, и если это невозможно, это обходное решение?
Если вы хотите добавить пробел перед любым письмом, достаточно использовать
var str='The_Andy_Griffith_Show';
str = str.replace(/[A-Z]/g, ' $&')
console.log(str); // => " The_ Andy_ Griffith_ Show"
Здесь /[AZ]/g
соответствует всем прописным буквам ASCII, а $&
является обратной ссылкой на все значение соответствия.
Если вы хотите просто добавить пробел перед первой заглавной буквой в слове, вам нужно использовать группы захвата и обратные ссылки для своих значений в шаблоне замены:
var str='The_Andy_Griffith_Show'; // string to perform replace on
str = str.replace(/(^|[^A-Z])([A-Z])/g, '$1 $2')
console.log(str); // => " The_ Andy_ Griffith_ Show"
Удалить ^|
если вы не хотите добавлять пробел перед заглавной буквой при начале строки (т.е. используйте /([^AZ])([AZ])/g
).
Просто альтернатива другим ответам.
Чтобы получить ожидаемый результат, вы можете просто сопоставить не верхние регистры, за которыми следует символ верхнего регистра, а затем заменить их на соответствие $&
и пробелу.
Например:
var str='The_Andy_Griffith_Show';
str = str.replace(/[^A-Z](?=[A-Z])/g, '$& ')
console.log(str);
Или просто сопоставьте те верхние регистры, за которыми следует символ верхнего регистра.
var str='The_Andy_Griffith_Show';
str = str.replace(/[_](?=[A-Z])/g, '$& ')
console.log(str);
Чтобы добавить пространство ко всем вхождениям прописных букв:
var str = 'The_Andy_Griffith_Show',
str2 = str.replace(/[A-Z]/g, letter => ' ${letter}');
console.log(str2);
Обратите внимание, что если вы не хотите добавлять пространство в первое письмо, просто используйте регулярное выражение /(?!^)[AZ]/g
.