【发布时间】:2019-05-31 07:45:01
【问题描述】:
我正在和一些朋友一起为游戏聊天室制作机器人,但我陷入了僵局。有没有一种可靠的方法可以从不会完全破坏没有经验的脚本小子大脑的文本字符串中获取数字?这是迄今为止我能想到的最好的,为了便于说明,变量稍微简化了:
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 [骰子上的最高数字]”。对于任何不知道的人,这是大多数桌面 rpg 使用的符号。例如,两个普通的六面骰子“掷 2d6”。
编辑:这并不是说我一定要反对正则表达式,我只是想能够理解发生了什么,这样当我需要编辑或重用代码时,我可以这样做而不会完全发疯。
编辑:非常感谢大家! split() 似乎正是我想要的!这可能需要一些尝试和错误,但我想我可以让她在这个周末按照她应该的方式工作(是的,我称我的机器人为“她”)。
【问题讨论】:
-
字符串输入会是什么样子?以这种方式举个例子更容易,但只是为了提供一种方式,您始终可以遍历字符串字符,如果值为 isNaN 则忽略它,否则它是一个数字。
-
@basic 来自底部的
===比较,它看起来应该遵循模式“roll \d+d\d+” -
对于完全不使用正则表达式的解决方案,您有多么特别? @thenotoriouswhitemoth
-
我建议对文本使用 .split("") 函数,例如 var splitText = text.split("");这会将字符串分解为单独的字符作为数组。然后,您可以遍历数组以查找数字。尽管如此,我还是强烈建议您查看一个数字正则表达式,因为它可以更好地扩展。
-
我只是将正则表达式解决方案放在 cmets 中,因为从技术上讲,它不是您问题的答案,但我只是想证明明智地使用缩放是多么容易。这段代码将注销字符串中找到的所有数字匹配,无论数字中有多少位: var text = "example 25 thing392more86"; var splitText = text.match(/\d+/g); splitText.forEach(function(value){ console.log(value); });
标签: javascript string input integer chatbot