44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
/**
|
|
* Basic parser for URL properties
|
|
* @author Miller Medeiros
|
|
* @version 0.1.0 (2011/12/06)
|
|
* MIT license
|
|
*/
|
|
define(function(){
|
|
|
|
var rProps = /([\w-]+)\s*:\s*(?:(\[[^\]]+\])|([^,]+)),?/g, //match "foo:bar" and "lorem:[ipsum,dolor]" capturing name as $1 and val as $2 or $3
|
|
rArr = /^\[([^\]]+)\]$/; //match "[foo,bar]" capturing "foo,bar"
|
|
|
|
function parseProperties(str){
|
|
var match, obj = {};
|
|
while (match = rProps.exec(str)) {
|
|
obj[ match[1] ] = typecastVal(match[2] || match[3]);
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
function typecastVal(val){
|
|
if (rArr.test(val)){
|
|
val = val.replace(rArr, '$1').split(',');
|
|
} else if (val === 'null'){
|
|
val = null;
|
|
} else if (val === 'false'){
|
|
val = false;
|
|
} else if (val === 'true'){
|
|
val = true;
|
|
} else if (val === '' || val === "''" || val === '""'){
|
|
val = '';
|
|
} else if (! isNaN(val)) {
|
|
//isNaN('') == false
|
|
val = +val;
|
|
}
|
|
return val;
|
|
}
|
|
|
|
//API
|
|
return {
|
|
parseProperties : parseProperties,
|
|
typecastVal : typecastVal
|
|
};
|
|
});
|