我有以下参数:
kibana
我想拆分UserId和ID。我该怎么办?
这不是特定于ExtJS的问题。您可以使用以下正向预见正则表达式对KEY=
后面的每个逗号进行分割。
/,(?=[a-z]+=)/gi
所以您得到:
params.split(/,(?=[a-z]+=)/gi) // [ "UserId=1,2,3","Id=1" ]
我走了一步,将两对简化为一个数据对象。
console.log(parseParams("UserId=1,3,Id=1"));
function parseParams(params) {
return params.split(/,(?=[a-z]+=)/gi).reduce((obj,pair) => {
let parts = pair.split('='),key = parts[0],value = parts[1];
if (isNumeric(value)) {
value = parseInt(value,10);
} else if (value.indexOf(',') > -1) {
value = value.split(',').map(value => isNumeric(value) ? parseInt(value,10) : value);
}
return Object.assign(obj,{ [key] : value });
},{});
}
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
if (String.prototype.isNumeric === undefined) {
String.prototype.isNumeric = function() {
return !isNaN(parseFloat(this)) && isFinite(this);
}
}
class ParamParser {
static defaultParser = new ParamParser();
constructor() {
// Do nothing...
}
/**
* @public
* Try not to override this...
*/
parse(params) {
return this.__parsePairs(params.split(/,(?=[a-z]+=)/gi));
}
/**
* @protected
* Override this if you want...
*/
parseValue(value,key) {
return value;
}
/**
* @private
* Do not override this...
*/
__parsePairs(pairs) {
return pairs.reduce((obj,pair) => {
return Object.assign(obj,this.__parsePair(pair));
},{});
}
/**
* @private
* Do not override this...
*/
__parsePair(pair) {
let parts = pair.split('=');
return { [parts[0]] : this.parseValue(parts[1],parts[0]) };
}
/**
* @public
* Call this to use the default parser...
*/
static parse(params) {
return ParamParser.defaultParser.parse(params);
}
}
class MyParamParser extends ParamParser {
constructor() {
super();
}
/**
* @override
*/
parseValue(value,key) {
if (value.isNumeric()) {
return parseInt(value,') > -1) {
return value.split(',').map(value => value.isNumeric() ? parseInt(value,10) : value);
}
return value;
}
}
console.log(new MyParamParser().parse("UserId=1,Id=1"));
.as-console-wrapper { top: 0; max-height: 100% !important; }
如果要创建ExtJS类,可以遵循此模式。
/**
* @filename com/stackoveflow/questions/59178653/ParamParser.js
*/
Ext.define('com.stackoveflow.questions.59178653.ParamParser',{
statics : {
defaultParser : Ext.create('com.stackoveflow.questions.59178653.ParamParser');
},parse : function(params) {
// logic from above...
}
});