Javascript Regex为文本冒险游戏制作命令行解析器

Javascript Regex to make command line parser for Text Adventure Game

本文关键字:命令行 Regex 文本 冒险游戏 Javascript      更新时间:2023-09-26

我正在尝试为文本冒险游戏编写命令行解析器。我把命令写进数组:Look, Talk, Get,等等…

我如何编写一个正则表达式,它将在命令行开头查找这些命令,忽略单词"at, with, on等",然后将命令行中其余的单词作为字符串拾取。例如,如果用户输入:"与孤独树交谈",我希望正则表达式找到"交谈"作为命令,忽略"与",然后将"孤独树"变成字符串。有什么代码建议吗?

这就是我想出来的,由于某种原因,当我把它放入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);
 }

我会尝试另一种方法:

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
}

对于您的示例,应该这样做:

 /('blook|look|talk|get)'b.*'b(lonely'Wtree|something'Welse)'b/g

用你指定的任何"孤独树"对象捕获你的任何命令。如果您想使用RegExes,请尝试http://regexr.com/

在你的情况下,我猜你的Regex可能会变得相当大,如果你有很多游戏命令和对象。如果您先检查命令,然后在第二步检查可能的对象,则性能会更好。