我试图遍历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之前的解决方案。不是我的决定,而是我正在使用的系统。
答案 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);