Javascript正则表达式为文本冒险游戏制作命令行解析器

Javascript正则表达式为文本冒险游戏制作命令行解析器,javascript,arrays,regex,string,parsing,Javascript,Arrays,Regex,String,Parsing,我正在尝试为一个文本冒险游戏编写一个命令行解析器。我将命令写入一个数组:Look、Talk、Get等 如何编写一个正则表达式,在命令行的开头查找这些命令,忽略at、with、on等单词。。然后将命令行上的其余单词作为字符串提取。例如,如果用户键入: 与Lonely tree对话,我希望正则表达式找到作为命令的对话,忽略,然后将Lonely tree转换为字符串。有代码建议吗 这就是我想到的,出于某种原因,当我将页面放入HTML时,页面是空白的: //Iterate through the arr

我正在尝试为一个文本冒险游戏编写一个命令行解析器。我将命令写入一个数组:Look、Talk、Get等

如何编写一个正则表达式,在命令行的开头查找这些命令,忽略at、with、on等单词。。然后将命令行上的其余单词作为字符串提取。例如,如果用户键入: 与Lonely tree对话,我希望正则表达式找到作为命令的对话,忽略,然后将Lonely tree转换为字符串。有代码建议吗

这就是我想到的,出于某种原因,当我将页面放入HTML时,页面是空白的:

//Iterate through the array to see if a command was used
var myStringArray = ["Look","Talk","Take"];
var arrayLength = myStringArray.length;
for (var i = 0; i < arrayLength; i++) {
   //When it picks a particular word up it will save it.
   var str = "Talk with Lonely Tree";
  var textcmd = +str.split(' ')[0];

//replace the command word and unnecessary other words in the text
if (i == textcmd){

var objecttxt = str;
objecttxt = str.replace(textcmd, "")

var myUselessWords = ["on","with","at","to"];
var uselessLength = myUselessWords.length;
for (var t = 0; t < uselessLength; t++) {

var uselessCollection = [];
uselessCollection.push = t;

objecttxt = str.replace(t, "");

}
}
alert(objecttxt + " " + textcmd);
 }

以您的示例为例,类似这样的操作应该会起作用:

 /(\blook|look|talk|get)\b.*\b(lonely\Wtree|something\Welse)\b/g
这将捕获您指定的任何孤独树对象的任何命令。如果你想玩正则表达式,试试看


在你的例子中,我想如果你有很多游戏命令和对象,你的正则表达式可能会变得相当大。如果先检查命令,然后在第二步检查可能的对象,性能会更好。

我会尝试另一种方法:

var input = userinput; //however you get it
var commands = [/look/i, /take/i, /talk/i];
var gameObjects = []; //push objects here as they're created

var command = commands.filter(function(r) { return input.match(r); });
var object = gameObjects.filter(function(obj) {
    return input.match(new RegExp(obj.name, 'i');
});

if (command.length and object.length) {
    //do stuff, remember that String.prototype.match returns an array even
    //if there's only one match, so be sure to unbox
}

第一步:尝试一下。第二步:如果有效,那就太好了!否则,重复第1步,直到你的想法用尽,然后寻求帮助并展示你所做的尝试。有时我们来stackoverflow了解如何继续。我并不是要求写一个完整的应用程序,只是为了帮助你找到最好的方法。正则表达式并不是最容易完成的事情,将数组放到混合中只会使它复杂化。所以,我只是想看看这里的启动。我不需要使用正则表达式,只需要按空格分割成标记,然后将每个标记与命令和subjectsOK的映射进行比较,所以我试着这样做。看看我修改过的代码。现在显示为空白。我更新/修复了您在此处发布的代码:OK。我更新了我原来的帖子,并添加了一个没有正则表达式的示例。这样会更好吗?还有,我的代码做错了什么?你应该继续使用正则表达式,因为它们比自定义字符串处理代码更短,而且通常运行得更快。可以使用多个正则表达式对字符串执行不同的检查。例如,首先验证输入字符串是否不包含不需要的字符,然后检查用户命令,然后检查句子的对象。另外,最好使用console.log而不是alert,并检查javascript控制台。您没有向DOM写入任何内容,这就是浏览器保持空白的原因。