JSFiddle - React, Tailwind, and code Playground
by Alexandre Simoes
JavaScript
function convertToRange(args){
var rowKeywordRegExp = /^clt-([a-zA-Z]+)-?(c\d+)?:?(c\d+)?-?([^-:]+)?$/i,
globalKeywordRegExp = /^clt-([a-zA-Z]+)-r(\d+):c(\d+)-r(\d+):c(\d+)-?(.+)?$/i;;
if(isRowKeyword(args.keyword))
return fromRowKeyword(args);
else if(isGlobalKeyword(args.keyword))
return fromGlobalKeyword(args);
else
return null;
function isRowKeyword(keyword){
return rowKeywordRegExp.test(keyword);
}
function isGlobalKeyword(keyword){
return globalKeywordRegExp.test(keyword);
}
function fromRowKeyword(args){
var kReg = rowKeywordRegExp;
var values = kReg.exec(args.keyword);
var c1 = values[2] === undefined ? '1' : values[2].substring(1),
c2 = null;
if(values[2] === undefined)
c2 = 999;
else
c2 = values[3] === undefined ? c1 : values[3].substring(1);
//args.keyword =
return 'clt-' + values[1] +
'-r' + args.rowNumber +
':c' + c1 +
'-r' + args.rowNumber +
':c' + c2 +
(values[4] !== undefined ? ('-' + values[4]) : '');
}
function fromGlobalKeyword(args){
// nothing to be done
return args.keyword;
}
}
// TEST!
var testCases = [
// *** ROW KEYWORDS ***
{ keyword: 'clt-itl', rowNumber: 5, expResult: 'clt-itl-r5:c1-r5:c999' },
{ keyword: 'clt-hgt-200', rowNumber: 5, expResult: 'clt-hgt-r5:c1-r5:c999-200' },
{ keyword: 'clt-itl-c2', rowNumber: 5, expResult: 'clt-itl-r5:c2-r5:c2' },
{ keyword: 'clt-fgc-c2-yellow', rowNumber: 5, expResult: 'clt-fgc-r5:c2-r5:c2-yellow' },
{ keyword: 'clt-bld-c2:c5', rowNumber: 5, expResult: 'clt-bld-r5:c2-r5:c5' },
{ keyword: 'clt-bgc-c2:c5-green', rowNumber: 5, expResult: 'clt-bgc-r5:c2-r5:c5-green' },
// *** GLOBAL KEYWORDS ***
{ keyword: 'clt-itl-r1:c2-r3:c5', rowNumber: 5, expResult: 'clt-itl-r1:c2-r3:c5' },
{ keyword: 'clt-bgc-r1:c2-r3:c5-green', rowNumber: 5, expResult: 'clt-bgc-r1:c2-r3:c5-green' }
];
for(var i=0; i<testCases.length; i++){
var tc = testCases[i],
result...