I'm trying to write a node script that identifies unused translation strings in my React project.
First, I want to get a list of all the translations that are used. To do this, I am getting a list of each JS file in my /src/components folder and then reading the file.
My translation strings look like this: t('some.translation.key'), so basically, I want to identify each instance of t('...') using RegEx and then get the key in between those parentheses (i.e. "some.translation.key"). From there, I should be able to compare the keys to the ones in my translation JSON file and remove the ones that aren't being used.
unused.js
const path = require('path'); const fs = require('fs'); let files = []; // https://stackoverflow.com/a/63111390/2262604 function getFiles(dir) { fs.readdirSync(dir).forEach(file => { const absolute = path.join(dir, file); if (fs.statSync(absolute).isDirectory()) { getFiles(absolute); } else { if (absolute.includes('.js')) { files.push(absolute); } } }); return files; } function getTranslations() { const pathComponents = path.join(__dirname, '../../src/components'); // get all js files in components directory const files = getFiles(pathComponents); const translationKeys = []; // for each js file for(let i = 0; i < files.length; i++) { // read contents of file const contents = fs.readFileSync(files[i]).toString(); // search contents for all instances of t('...') // and get the key between the parentheses } } getTranslations(); How can I use RegEx to find all instances of t('...') in contents and then extract the ... string between the parentheses?