У меня проблема, когда я запускаю это регулярное выражение несколько раз подряд подряд.Если это слишком быстро, массив возвращается как ноль.Если я подожду секунду между запуском, я не получу ошибку.Я почти уверен, что регулярное выражение является проблемой, потому что я могу войти 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;
};
};