返回字符串的特定部分

时间:2017-08-04 19:44:54

标签: javascript

我目前有一个返回这组数据的字符串:

  7,438,686 IN        NONRESET CNTR     
  172,269 IN          RESET CNTR1       
  0 IN                RESET CNTR2       
  18,895,900 CM       NONRESET CNTR     
  437,602 CM          RESET CNTR1       
  10 CM               RESET CNTR2       
  SELECTED ITEMS      PASSWORD LEVEL  

我唯一关注的数据是' RESET CNTR2'价值' 10 CM'。如何使用JavaScript创建仅包含' 10 CM'?的字符串? ' 10 CM'是动态数据。

提前谢谢大家!

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来提取该段文本。用regex tester玩一下就可以看出

function ObserverList(){
  this.observerList = []
  this.listeners = []
}

ObserverList.prototype.add = function( obj ){
  this.observerList.push(obj)
  this.listeners.forEach(function(callback){
    callback({type:'add', obj:obj})
  })
}

ObserverList.prototype.onChange = function(callback){
  this.listeners.push(callback)
}

是您可能正在寻找的正则表达式。然后,要使用它,您只需执行以下操作:

/((\d+) CM) *RESET CNTR2/

然后var regex = /((\d+) CM) *RESET CNTR2/; var string = "7,438,686 IN ...."; var captureGroups = regex.exec(string); 包含captureGroups[1]10 CM只包含captureGroups[2]

答案 1 :(得分:0)

RESET CNTR2在您的数据集中出现两次。该值是否必须与CM连接,并且所有值都在新行上?

以下内容可以解决您的问题:

    const key = 'RESET CNTR2',
        metrics = 'CM';
    
    const data = `
      7,438,686 IN        NONRESET CNTR     
      172,269 IN          RESET CNTR1       
      0 IN                RESET CNTR2       
      18,895,900 CM       NONRESET CNTR     
      437,602 CM          RESET CNTR1       
      10 CM               RESET CNTR2       
      SELECTED ITEMS      PASSWORD LEVEL 
    `.split('\n');
    
    let index = data.findIndex(str => str.indexOf(key) > -1 && str.indexOf(metrics) > -1);
    
    let row = data[index];
    
    let val = row.substring(0, row.indexOf(metrics));
    
    console.log(val);
    
    // or if you need the 'cm' part
    
    console.log(`${val}${metrics}`);

答案 2 :(得分:0)

我认为应该这样做

var str = `7,438,686 IN        NONRESET CNTR     
  172,269 IN          RESET CNTR1       
  0 IN                RESET CNTR2       
  18,895,900 CM       NONRESET CNTR     
  437,602 CM          RESET CNTR1       
  10 CM               RESET CNTR2       
  SELECTED ITEMS      PASSWORD LEVEL `;

var rows = str.split('\n');
for ( var n in rows ) {
   if ( rows[n].indexOf('RESET CNTR2') != -1 ) {
        var rowbits = rows[n].trim().split('  ');
      if( parseInt(rowbits[0]) > 0 ){
        console.log(rowbits[0]);
      }
   }
}

小提琴在这里:https://jsfiddle.net/jd3Lxgj3/