遍历空格分隔的文本行并检索字段

时间:2019-06-13 00:29:05

标签: javascript object iteration whitespace delimited

我试图遍历JavaScript中用空格分隔的文本记录,并检索该记录中的各个字段。每个字段由固定数量的空格分隔,该空格在单独的JavaScript对象中引用。

var text = "apple     banana  orange       peach  ";  

var whiteSpaceDictionary = {item1 : 10, item2: 8, item3: 13, item4 : 7}

理想情况下,我正在尝试解析此记录并将它们存储在单独的变量中。如fruit1 = 'apple; fruit2 = 'banana'; fruit 3 = 'orange'; fruit4 = 'peach';所示,但是我很难单独打印这些值。任何帮助都将非常有帮助。 这是我尝试的代码,未产生太多结果。

// Iterate through Dictionary
for (var key in whiteSpaceDictionary) {
    // Iterate Over Text Record
    for (var x = 0; x < text.length; x+=whiteSpaceDictionary[key]){
        if (x == 0 ){
            positionCounter = 0;
        } else {
            positionCounter = positionCounter + whiteSpaceDictionary[key];
        }
        logger.info('Field: ' + x + ' ' + text.substr(positionCounter,whiteSpaceDictionary[key]));

    }

}

注意:首选ES6之前的解决方案。不是我的决定,而是我正在使用的系统

1 个答案:

答案 0 :(得分:0)

只需将非空格字符与正则表达式匹配,即可获得所需的值数组:

var text = "apple     banana  orange       peach  ";  
const fruits = text.match(/\S+/g);
console.log(fruits);

与将每个项目放在单独的独立变量中相比,数组更有意义,但如果需要:

var text = "apple     banana  orange       peach  ";  
const [fruit1, fruit2, fruit3, fruit4] = text.match(/\S+/g);
console.log(fruit1);
console.log(fruit4);

如果您输入的内容实际上不同,并且要匹配的子字符串内部可能存在空格,则必须迭代该对象:

var text = "apple     banana  orange       peach  ";
var whiteSpaceDictionary = {
  item1: 10,
  item2: 8,
  item3: 13,
  item4: 7
}

let last = 0;
const fruits = Object.values(whiteSpaceDictionary)
  .map(val => {
    const str = text.slice(last, last + val);
    last += val;
    return str;
  });
console.log(fruits);