function sizeParts(size) {
var sizeRx = /(.*?)(small|medium|large|super|s|m|l)(.*)/,
match = sizeRx.exec(size.toLowerCase()),
parts = {
prefix: '',
size: '',
suffix: ''
};
if (match) {
parts.prefix = match[1];
parts.size = match[2];
parts.suffix = match[3];
}
return parts;
}
function valueOfSize(size) {
var parts = sizeParts(size),
prefixMatch = parts.prefix.match(/x/g),
numOfXs = prefixMatch && prefixMatch.length || 0,
suffixNumber = parseInt(parts.suffix.match(/\d/), 10) || 0,
size = -1;
switch (parts.size) {
case 'small':
// fall through
case 's':
size = 1 - Math.min(numOfXs, 1); // no more than one X for small
break;
case 'medium':
// fall through
case 'm':
size = 2;
break;
case 'large':
// fall through
case 'l':
size = 3 + Math.min(numOfXs, 2); // no more than two X's for large
break;
case 'super':
size = 6 + suffixNumber;
break;
default:
// leave size at default value
}
return size;
}
var sizesToTest = ['XS', 'XSmall', 'unknown', 'X small', 'x-small', 'x-s', 'small', 'medium', 'm', 'large', 'l', 'xl', 'xxl', 'super', 'superdog', 'super dog 1', 'superdog2'],
i, size, value;
for (i = 0; i < sizesToTest.length; i += 1) {
size = sizesToTest[i];
value = valueOfSize(size);
console.log('size: ', size, ', value: ', value);
}
Bookmarks