Javascript: Как я могу поместить эти данные лучше? (строка в массив / объект) - PullRequest
1 голос
/ 16 февраля 2020

У меня есть строка, которая может выглядеть следующим образом:

str = "4bobsCat3carsOfThisGarage10this1that0whatever";

Моя строка всегда начинается с числа от 0 до 99, у меня есть несколько цепочек символов, состоящих из строчных и прописных букв, разделенных цифрами от 0 до 99. Эта строка в основном:

  • число от 0 до 99
  • символов от a до z или от A до Z

Этот шаблон повторяется сама пару раз. Я хочу создать объект / массив, чтобы лучше классифицировать эти странные данные ... Было бы здорово, если бы я мог получить что-то вроде:

array = [4, "bobsCat", 3, "carsOfThisGarage", 10, "this", 1, "that", 0, "whatever"]

Или вот так:

object["bobsCat"] = {number : 4};
object["carsOfThisGarage"] = {number : 3};
object["this"] = {number : 10};
object["that"] = {number : 1};
object["whatever"] = {number : 0}

Спасибо!

Ответы [ 3 ]

2 голосов
/ 16 февраля 2020

Вы можете сделать это с помощью регулярного выражения

let str = "4bobsCat3carsOfThisGarage10this1that0whatever";
let rx = /(\d{1,2})([a-zA-Z]+)/g;

var rxResult = null;
while (rxResult = rx.exec(str)) {
    // rxResult[1] will be your number
    // rxResult[2] will be text
    console.log(rxResult[1], rxResult[2]);
}
1 голос
/ 16 февраля 2020

Чтобы получить вторую структуру объекта, вы можете использовать новый метод matchAll и унарный оператор плюс для преобразования цифр в тип числа:

let str = "4bobsCat3carsOfThisGarage10this1that0whatever";

let obj = {};
for (let [, dig, key] of str.matchAll(/(\d+)(\D+)/g)) {
    obj[key] = { number: +dig };
}

console.log(obj);
0 голосов
/ 16 февраля 2020

Попробуйте это:

str.split(/(\d+)/)

Вы также можете удалить пустые строки ("") с помощью:

str.split(/(\d+)/).filter(Boolean)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...