Есть задача найти все значения camelCase в объекте. По какой-то причине поиск выборочно не распознает заданный паттерн. В чем может быть причина? Заранее спасибо за помощь.
const objWithCamelCaseValues = {
text1: 'camelCase',
text2: 'camelCase',
text3: 'camelCase',
text4: 'camelCase',
text5: 'camelCase',
}
function splitCamelCase(str) {
return str.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();
}
function convertCamleCase(objToConvert) {
const camelCaseRegExp = /^[a-zA-Z]+$/gm; // https://regexr.com/75cqi
let obj = {...objToConvert};
for (const [key, value] of Object.entries(obj)) {
const isValueCamelCase = camelCaseRegExp.test(value);
if (isValueCamelCase) {
obj = {
...obj,
[key]: splitCamelCase(`${value}`),
};
}
}
return obj;
}
console.log(convertCamleCase(objWithCamelCaseValues))
> { text1: 'camel case', text2: 'camelCase', text3: 'camel case', text4: 'camelCase', text5: 'camel case' }
1 лайк
Привет! Проблема во флаге g, а точнее, в присутствии его и использовании этой регулярки с методом .test! Я нашёл ответ на этот вопрос и варианты решения такой проблемы. Даже несколько. Аж самому интересно стало. Спасибо, что задали его :)
https://stackoverflow.com/questions/604860/interesting-test-of-javascript-regexp
2 лайка
А нельзя без регулярного выражения обойтись? У меня вот какие заклинания получились:
/*
Есть задача найти все значения camelCase в объекте
*/
const objWithCamelCaseValues = {
text1: 'camelCase',
text2: 'camelCase',
text3: 'camelCase',
text4: 'camelCase',
text5: 'camelCase',
text6: 'camelcase',
text7: 'Camelcase',
text8: 'CamelCasE'
}
/* Все значения cC */
console.log( Object.values(objWithCamelCaseValues).filter( x => x.at(0) === x.at(0).toLowerCase() && x !== x.toLowerCase() ) );
// ['camelCase', 'camelCase', 'camelCase', 'camelCase', 'camelCase']
/* Объект с cC */
console.log( Object.fromEntries( Object.entries(objWithCamelCaseValues).filter( ([y, x]) => x.at(0) === x.at(0).toLowerCase() && x !== x.toLowerCase() )) );
// {text1: 'camelCase', text2: 'camelCase', text3: 'camelCase', text4: 'camelCase', text5: 'camelCase'}
Всем спасибо за помощь!:)
1 лайк