Регулярное выражение не всегда находит заданный паттерн

Есть задача найти все значения 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 лайк