如何在字符串中搜索“ x”或“任何数字”?

时间:2019-10-16 17:11:32

标签: javascript

想要制作骰子滚动脚本时,我遇到了一个障碍。

这个想法是,您可以输入任意数量的参数来滚动任意数量的骰子2d6 + 1d4 + 5d2 - [...]

如何制作一个查找所有x d y并将其放入数组的脚本?它必须基于x d y,而不是例如1d4+1d6-1d8之类的空格。

4 个答案:

答案 0 :(得分:1)

您可以使用matchAll提取数字对,如下所示:

let s = "1d4+1d6-1d8";
let x = Array.from(s.matchAll(/(-?\d+)d(\d+)/g));
console.log(x);

这为您提供了一组三胞胎。每个三元组都有匹配的xdy模式,x的值和y的值(作为字符串)。

如果您需要x和y值作为数字而不是字符串,则将映射器回调添加到Array.from调用中:

let s = "1d4+1d6-1d8";
let x = Array.from(s.matchAll(/(-?\d+)d(\d+)/g), ([s, x, y]) => [+x, +y]);
console.log(x);

答案 1 :(得分:0)

首先创建一个接受字符串(如“ 2d6”)并返回数字的函数

function rollDice(dicePattern) {
  var num = ... //use regex or indexOf ("d");
  var sides = ... //regex or substring(indexOf("d) + 1);
  var sum = 0;
  for (let i = 0; i <num;i++) {
    //generate a random, multiply by sides, get the int value, and add it to sum
  }
  return sum;
}

然后分割字符串,并在所有骰子掷骰模式中调用它

答案 2 :(得分:0)

如评论中所述,正则表达式是您的朋友。 regexr非常方便! https://regexr.com/4mvj6

\d将匹配数字字符,因此\dd\d将匹配字符串中的任何数字+'d'+数字组合。

// '2d6 + 1d4 + 5d2' => ['2d6', '1d4', '5d2']
function parseRolls(rollsString)
{
  if (rollsString)
  {
    return rollsString.match(/\dd\d/g);
  }
  return [];
}

答案 3 :(得分:0)

我不确定您所期望的确切格式是什么,但这会返回具有属性xy的对象数组,给定的字符串为x d { {1}}由正负号分隔。

y