想要制作骰子滚动脚本时,我遇到了一个障碍。
这个想法是,您可以输入任意数量的参数来滚动任意数量的骰子2d6 + 1d4 + 5d2 - [...]
。
如何制作一个查找所有x
d y
并将其放入数组的脚本?它必须基于x
d y
,而不是例如1d4+1d6-1d8
之类的空格。
答案 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)
我不确定您所期望的确切格式是什么,但这会返回具有属性x
和y
的对象数组,给定的字符串为x
d { {1}}由正负号分隔。
y