Числа внутри строки без регулярных выражений? - PullRequest
0 голосов
/ 04 января 2019

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

var k = [0];
function dieRoll(m,n) {
    for(i = 0; i < m; i++) {
        k[i] = Math.floor(Math.random()*n)+1;
    }
}

var m = text[5];
var n = text[7];
if (text === 'roll '+m+'d'+n) {
    dieRoll(m,n)
    console.log(k);
}

Самая большая проблема в том, что она ограничена вводом одной цифры.

РЕДАКТИРОВАТЬ: циклический просмотр текста в поисках целых чисел - это именно то, что я ищу. У меня нет большого опыта в программировании, так что я, вероятно, склоняюсь к чрезмерно сложным и запутанным путаницам спагетти-кода, который смутил бы любого удаленно профессионала. Что касается формата ввода, который я ищу, «бросьте [количество кубиков] d [наибольшее число на кубике]». Для тех, кто не знает, эта нотация используется большинством настольных rpgs. Например, «бросьте 2d6» для двух обычных шестигранных кубиков.

РЕДАКТИРОВАТЬ: Дело не в том, что я обязательно против регулярных выражений, я просто хочу быть в состоянии понять, что происходит, так что, если и когда мне нужно будет отредактировать или повторно использовать код, я могу сделать это, не сходя с ума.

РЕДАКТИРОВАТЬ: Спасибо всем большое! split (), кажется, именно то, что я искал! Вероятно, потребуется несколько проб и ошибок, но я думаю, что смогу заставить ее работать так, как она должна в эти выходные (да, я называю своих ботов «она»).

1 Ответ

0 голосов
/ 04 января 2019

По сути, вам нужно посмотреть на формат ввода, который вы используете, и определить некоторые факты об этом. Вот предположения, которые я сделал на основании вашего вопроса.

1) Сначала следует команда "roll", затем пробел и 2) После команды вам предоставляется информация о кости в виде x d y .

Вот что должно работать с учетом этих ограничений:

function getRollParameters(inputCommand) {

  var inputWords = inputCommand.split(' '); //Split our input around the space, into an array containing the text before and after the space as two separate elements.

  var diceInfo = inputWords[1]; //Store the second element as "diceInfo"

  var diceDetails = diceInfo.split('d'); //Split this diceInfo into two sections, that before and after the "d" - ie, the number of dice, and the sides.

  //assign each part of the dicedetails to an appropriate variable
  var dice = diceDetails[0];
  var sides = diceDetails[1];

  //return our two pieces of information as a convenient object.
  return {
    "dice": dice,
    "sides": sides
  };
}
//a couple of demonstrations
console.log(getRollParameters("roll 5d8"));
console.log(getRollParameters("roll 126d2"));

По сути, мы сначала разбиваем строку на «команду» и «аргументы» - информацию, которую мы хотим. Затем мы разделяем наши аргументы, используя «d» в качестве средней точки. Это дает нам два числа - одно до и одно после d. Затем мы присваиваем эти значения переменным и можем использовать их так, как нам нравится.

Очевидно, что это не относится к более креативным или гибким входам и не тестируется за пределами показанных примеров, но должно быть хорошей отправной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...