Вы можете использовать следующее выражение с несколькими вспомогательными методами для очистки вывода:
"NoOfSAP".split(/([A-Z][a-z]+)/).filter(Boolean).join(' ');
Это будет соответствовать всем заглавным буквам, за которыми следуют одна или несколько строчных букв, и разбивать каждый кусок на массив. .filter(Boolean)
затем используется для удаления любых пустых строк в массиве, а .join
используется для добавления пробелов между строками в массиве.
См. Пример ниже:
const getWords = wrd =>
wrd.split(/([A-Z][a-z]+)/).filter(Boolean).join(' ');
console.log(getWords("NoOfSAP")); // No Of SAP
console.log(getWords("ThisIsAWord")); // This Is A Word (notice how it will split individual letters such as A)
console.log(getWords("IAmAHuman")); // I Am A Human
console.log(getWords("JSIsGreat")); // JS Is Great (notice how it understands JS and Is are two seperate words and doesn't give JSI s Great)
В соответствии с вашим вопросом об изменении ключей в вашем объекте на ключи «без камеры», вы можете использовать .map
с Object.keys
для генерации вашего результата:
const getWords = wrd =>
wrd.split(/([A-Z][a-z]+)/).filter(Boolean).join(' ');
const obj = {
"NoOfSAP": 1,
"NoOfBUN": 2,
"NoOfBRE": 3,
"NoOfPEA": 4
}
const result = Object.keys(obj).map(getWords);
console.log(result);