在ext Java脚本中拆分

我有以下参数:

kibana

我想拆分UserId和ID。我该怎么办?

litongfei1208 回答:在ext Java脚本中拆分

这不是特定于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; }

ES6版本

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...
  }
});
本文链接:https://www.f2er.com/2977085.html

大家都在问