SOURCE

console 命令行工具 X clear

                    
>
console
/** 批量转码验证 */
function testModel(){
  //var models = ['ST2303B/S-B','ST2303B/S','ST2303B/S V2.0 W','ST2303B/S V2.0 E','ST2303B/S V2.0 W-M','ST2303B/S V2.0 E-M','ST2303B/S V3.0 W-M','ST2303B/S-ME','ST2303B/S W-XM'];
  var models = ['ST2303B/S-B','ST2303B/S','ST2303B/S W','ST2303B/S V2.0W','ST2303B/S V2.0E','ST2303B/S V2.0E-E','ST2303B/S V2.0W-M','ST2303B/S V2.0W-G','ST2303B/S V2.0E-X','ST2303B/S V2.0T-Y','ST2303B/S V3.0W-M','ST2303B/S -M-E','ST2303B/S V2.0-M-E','ST2303B/S V2.0-G-E','ST2303B/S V3.0E-XM-E','ST2303B/S V3.0Q-Y-E','ST2303B/S W-XM','ST2303B/S V2.0W-XY-E','ST2303B/S V3.0W-MY-E','ST2303B/S V3.0W-XMY-E','ST2303B/S V2.0W-HMY','ST2303B/S V2.0W-MY','ST2303B/S V3.0E-E0','ST2303B/S V3.0E-XY','ST2303B/S V4.0-EP-M9+'];
  _alt = "";
  for(var idx in models) {
    var val = models[idx];
    _alt += '\n<br>'+val+'&nbsp;&nbsp;&nbsp;&nbsp;\t    ';
    var newVal = replaceModel2(val);
   _alt += newVal?newVal:'(不符合规范)';
  }
  var result = document.getElementById('result');
  result.innerHTML = _alt;
}
function $(id){
  return document.getElementById(id);
}
/** 初步验证测试 */
function checkModel(){
	var val = document.getElementById('model').value;
  //var val = $('#model').val();
  /*
  普通(铁) ST2303B/S V1.0
  普通 ST2303B/S V2.0
  夜视 ST2303B/S V2.1
  声光告警 ST2303B/S V3.2
  测温、微气象、主副机 ST2303B/S V3.4
  云台 ST2303B/S V3.8
    */
  val = val.replace('ST2303B/S','');
  var is_empty = val.length == 0;
  _alt = '规范:';
  _val23 = /^\s{1}V[2|3]\.0[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A])*(-[a-z]{2})*$/.test(val);
	_val4 = /^\s{1}V4\.0[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A|0]{2})*(-[a-z]{2})*(-(?:M9|M9\+|M12|MG1))*$/.test(val);
  _alt += '\t'+((_val23 || _val4 || is_empty)?'符合':'不符合');

  // 普通(铁) ST2303B/S V1.0
  _v0 = /^\s{1}[E|W|T|Q]*-[B]{1,}$/.test(val);
  _alt += '\n普通(铁):\t'+(_v0?'是':'否');

  // 夜视 ST2303B/S 2.1
  _v1 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}(-.{1,4})*-.{0,3}[E]+$/.test(val);
  _alt += '\n夜视:\t'+(_v1?'是':'否');

  // 声光告警 ST2303B/S v3.2
  _v2 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-.{0,3}[M]$/.test(val);
  _alt += '\n声光告警:\t'+(_v2?'是':'否');

  // 夜视+声光告警 ST2303B/S v3.3
  _v3 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,}-.{0,3}[E|M]{1,2}(-.{0,1}[E]{1,})+$/.test(val);
  _alt += '\n夜视+声光告警:\t'+(_v3?'是':'否');

  // 测温、微气象、主副机 3.4
  _v4 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,3}[H|X|Q]{1,3}|.{0,3}[H|G|Q]{1,3})$/.test(val);
  _alt += '\n测温、微气象、主副机:\t'+(_v4?'是':'否');
  // 云台 ST2303B/S V3.8
  _v8 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-Y$/.test(val);
  _alt += '\n 云台:\t'+(_v8?'是':'否');

  alert(_alt);
}
/** 转码验证 */
function testModel2(){
  var val = document.getElementById('model2').value;
	var _alt = replaceModel2(val);
	var result = document.getElementById('result');
  result.innerHTML = _alt;
}
/** 标识新命名规则 */
var Def_MODEL = [
  {'ver':'.0','name':'普通设备:ST2303B/S V2.0'},
  {'ver':'.1','name':'夜视:ST2303B/S V3.1'},
  {'ver':'.2','name':'声光告警:ST2303B/S V3.2'},
  {'ver':'.3','name':'夜视+声光告警:ST2303B/S V3.3'},
  {'ver':'.4','name':'测温、微气象、主副机: ST2303B/S V3.4'},
  {'ver':'.5','name':'普通设备'},
  {'ver':'.6','name':'声光告警+测温、微气象、主副机: ST2303B/S V3.6'},
  {'ver':'.7','name':'普通设备'},
  {'ver':'.8','name':'云台'},
  {'ver':'.9','name':'夜视+云台'},
  {'ver':'.A','name':'声光告警+云台'},
  {'ver':'.B','name':'夜视+声光告警+云台'},
  {'ver':'.C','name':'测温、微气象、主副机+云台'},
  {'ver':'.D','name':'夜视+测温、微气象、主副机+云台'},
  {'ver':'.E','name':'声光告警+测温、微气象、主副机+云台'},
  {'ver':'.F','name':'普通设备'}
];
/** 装置型号转码
 * @param 原编码 型号
 * @return {String} 新编码
 */
function replaceModel(val){
  val = val.replace('ST2303B/S','');
  var version = '2';
  if(val.length>2) {
    version = val.substring(1,3);
  }
 
  //_val = /^(\s{1}(V[2|3]\.0)+[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A]{1})*)|(\s{1}(V4\.0)+[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A|0]{1,2})*(-[a-z]{2})*(-(?:M9|M9\+|M12|MG1))*)$/.test(val);

  _val23 = /^\s{1}V[2|3]\.0[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A])*(-[a-z]{2})*$/.test(val);
	_val4 = /^\s{1}V4\.0[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A|0]{2})*(-[a-z]{2})*(-(?:M9|M9\+|M12|MG1))*$/.test(val);
  
  if(_val23 || _val4){
    // 测温、微气象、主副机+云台 3.12 C
    var _v12 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-((.{0,2}[H|X|Q]{1,2}[Y]|.{0,2}[Y][H|X|Q]{1,2}|.{0,2}[H|G|Q]{1,2}[Y]|.{0,2}[Y][H|G|Q]{1,2}))/.test(val);
    if(_v12){
      return version + Def_MODEL[12]['ver'];
    }
    // 夜视+声光告警+云台 3.11 B
    var _v11 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,2}[M|Y]{2}|[M|Y]{2}.{0,2})-([E]|[P|A][E]|[E][P|0)]){1,2}/.test(val);
    if(_v11){
      return version + Def_MODEL[11]['ver'];
    }
    // 声光告警+云台 3.10
    var _v10 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,2}[M|Y]{2}|[M|Y]{2}.{0,2})/.test(val);
    if(_v10){
      return version + Def_MODEL[10]['ver'];
    }
    // 夜视+云台 3.9
    var _v9 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-[Y]-([E]|[P|A][E]|[E][P|0)]){1,2}$/.test(val);
    if(_v9){
      return version + Def_MODEL[9]['ver'];
    }
    // 夜视+声光告警+测温、微气象、主副机 3.7
    var _v7 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,2}[H|X|Q]{1,2}[M]|.{0,2}[M][H|X|Q]{1,2}|.{0,2}[H|G|Q]{1,2}[M]|.{0,2}[M][H|G|Q]{1,2})-([E]|[P|A][E]|[E][P|0)])+$/.test(val);
    if(_v7){
      return version + Def_MODEL[7]['ver'];
    }
    
		// 声光告警+测温、微气象、主副机 3.6
    var _v6 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,2}[H|X|Q]{1,2}[M]|.{0,2}[M][H|X|Q]{1,2}|.{0,2}[H|G|Q]{1,2}[M]|.{0,2}[M][H|G|Q]{1,2})$/.test(val);
    if(_v6){
      return version + Def_MODEL[6]['ver'];
    }
    
    // 夜视+测温、微气象、主副机 3.5
    var _v5 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,3}[H|X|Q]{1,2}|[H|X|Q]{1,2}.{0,3}|.{0,3}[H|G|Q]{1,2}|[H|G|Q]{1,2}.{0,3})-([E]|[P|A][E]|[E][P|0)])+$/.test(val);
    if(_v5){
      return version + Def_MODEL[5]['ver'];
    }
    
    // 夜视+声光告警 ST2303B/S v3.3
    var _v3 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-.{0,3}[E|M]{1,2}-([E]|[P|A][E]|[E][P|0)])+$/.test(val);
    if(_v3){
      return version + Def_MODEL[3]['ver'];
    }
    ///////////基础类型
    // 测温、微气象、主副机 3.4
    var _v4 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,3}[H|X|Q]{1,3}|.{0,3}[H|G|Q]{1,3})$/.test(val);
    if(_v4){
      return version + Def_MODEL[4]['ver'];
    }
    // 声光告警 ST2303B/S v3.2
		var _v2 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-.{0,3}[M]$/.test(val);
    if(_v2){
      return version + Def_MODEL[2]['ver'];
    }
    // 夜视 ST2303B/S 2.1
		_v1 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-[E]|[P|A][E]|[E][P|0]+$/.test(val);
    if(_v1){
      return version + Def_MODEL[1]['ver'];
    }
    // 云台 ST2303B/S V3.8
		var _v8 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-Y$/.test(val);
    if(_v8){
      return version + Def_MODEL[8]['ver'];
    }
    return version + Def_MODEL[0]['ver']
    //return ',符合规范,未查处符合类型';
  } else {
    if('-B' == val){//铁壳
      return '1.0';//'ST2303B/S V1.0';
    }
    else if(val.length == 0) {
      return version + Def_MODEL[0]['ver'];
    }
    return ',不符合规范';
  }
}
/**装置型号转码
 * @param {String} _model 原编码 型号
 * @return {String} 新编码
 */
function replaceModel2(_model){
  var val = _model.replace('ST2303B/S','');
  var version = 'ST2303B/S V2';
  if(val.length>2) {
    version = 'ST2303B/S '+val.substring(1,3);
  }

  var _val23 = /^\s{1}V[2|3]\.0[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A])*(-[a-z]{2})*$/.test(val);
	var _val4 = /^\s{1}V4\.0[E|W|T|Q]{0,1}(-[B|F|I|J|H|X|G|M|N|Q|Y|S]{1,4})*(-[P|E|A|0]{2})*(-[a-z]{2})*(-(?:M9|M9\+|M12|MG1))*$/.test(val);
  if(_val23 || _val4){
    var _num = 0;
    ///////////基础类型
     // 云台 ST2303B/S V3.8
		var _v8 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,3}[Y].{0,3})(-[P|E|A|0]{1,2})*(-[a-z]{2})*(-(?:M9|M9\+|M12|MG1))*$/.test(val);
    if(_v8){
      _num += 8;
      //$('msg').innerHTML = $('msg').innerHTML+'<br>'+_model+':8';
    }
    // 测温、微气象、主副机 3.4
    var _v4 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,3}[H|G|X|Q]{1,3}.{0,3})(-[P|E|A|0]{1,2})*(-[a-z]{2})*(-(?:M9|M9\+|M12|MG1))*$/.test(val);
    if(_v4){
      _num += 4;
      //$('msg').innerHTML = $('msg').innerHTML+'<br>'+_model+':4';
    }
    // 声光告警 ST2303B/S v3.2
		var _v2 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}-(.{0,3}[M].{0,3})(-[P|E|A|0]{1,2})*(-[a-z]{2})*(-(?:M9|M9\+|M12|MG1))*$/.test(val);
    if(_v2){
      _num += 2;
      //$('msg').innerHTML = $('msg').innerHTML+'<br>'+_model+':2';
    }
    // 夜视 ST2303B/S 2.1
		var _v1 = /^\s{1}V[2-4]\.0[E|W|T|Q]{0,1}(-.{1,4})*-(.{0,1}[E].{0,1})+(-[a-z]{1,2})*(-(?:M9|M9\+|M12|MG1))*$/.test(val);
    if(_v1){
      _num += 1;
      //$('msg').innerHTML = $('msg').innerHTML+'<br>'+_model+':1';
    }
    return version +'.'+ _num.toString(16).toUpperCase();
  } else {
    if('-B' == val){//铁壳
      return 'ST2303B/S V1.0';//'ST2303B/S V1.0';
    }
    else if(val.length == 0) {
      return version + '.0';
    }
    return null;
  }
}
<input style="width:220px" id="model" value="ST2303B/S V2.0W-P0-M9"/>&nbsp;<button onclick="checkModel()"> 验证 </button><br>
<input style="width:220px" id="model2" value="ST2303B/S V2.0-MY-E"/>&nbsp;<button onclick="testModel2()"> 验证 </button><br>
&nbsp;<button onclick="testModel()"> 批量验证 </button><br>
提示框:
<div id="msg" style="border:1px solid #0f0;background-color:white;">&nbsp;</div>
<div id="result" style="border:1px solid #0ff;background-color:white;">&nbsp;</div>