Перебирать текстовую строку и разделять поля с пробелами - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь перебрать текстовую запись с пробелами в 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 голосов
/ 13 июня 2019

Просто сопоставьте непробельные символы с регулярным выражением, и вы получите массив значений, который вам нужен:

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);
...