Возврат нулевого массива в Javascript при слишком быстром запуске regex.Мое регулярное выражение слишком медленное? - PullRequest
0 голосов
/ 29 ноября 2018

У меня проблема, когда я запускаю это регулярное выражение несколько раз подряд подряд.Если это слишком быстро, массив возвращается как ноль.Если я подожду секунду между запуском, я не получу ошибку.Я почти уверен, что регулярное выражение является проблемой, потому что я могу войти data только что без проблем.

let reg = /(\d+)d(\d+).+?\s(\d+|\d{1,3},\d{3})*?(\.\d+)*?\sgp\s(.+)/g;
let arr = reg.exec(data);

Пример данных:

  • 1d8 (4) 5000gp gems
  • 3d6 (10) 1000 gp gems
  • 1d4 (2) 7500 gp арт-объектов
  • 1dl0 (5) 2500 gp арт-объектов

Редактировать: вот полный код.Я получаю arr как ноль и ошибку let price = ("gp" + arr[3].replace(/,/g, ''));data - это просто одна строка, например, "1d8 (4) 5000 gp gems".По-прежнему проблема после вынимания g.

async function getObjects(data) {
    if (data !== "*") {
        chrome.extension.getBackgroundPage().console.log(data);
        let reg = /(\d+)d(\d+).+?\s(\d+|\d{1,3},\d{3})*?(\.\d+)*?\sgp\s(.+)/g;
        let arr = reg.exec(data);
        chrome.extension.getBackgroundPage().console.log(arr);
        let url = chrome.runtime.getURL("objects.json");
        let price = ("gp" + arr[3].replace(/,/g, ''));
        let name = arr[5] + " " + price;
        let sum = sumRolls(arr[1], arr[2]);

        let objects = await returnJSON(url, "name", name);       
        let num = objects[0].group.length;
        let output = [];

        for(let i = 0; i < sum; i++){
            let roll = Math.floor((Math.random() * num));
            output.push(objects[0].group[roll].desc);
        };
        return output;
    };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...