Node.js .match()方法的正确用法?

我从一个人那里买了一些代码,然后决定修改它。 首先,它是用Node.js编写的,我对node.js有很less(没有)编程经验,虽然我知道像样的Python和一些C#,所以我理解它。 尽pipe我一开始想编写代码,但是我没有成功地复制他所做的。

steamFriends.on('friendMsg', (id, msg) => { if (config.get('admins').indexOf(id) == -1) return; if (msg.indexOf('!price') == 0) { var match = msg.match(/!price (director|audition) ([\.0-9]+)/); if (!match) steamFriends.sendMessage(id, 'Usage: !price <director or audtion> <price> (eg !price director 3.77)'); else { steamFriends.sendMessage(id, 'Successfully set price of '+match[1] + ' reels to '+match[2] + '!'); PRICES[match[1] == 'audition' ? 0 : 1] = parseFloat(match[2]); changePrices(); } } else if (msg.indexOf('!changename') == 0) { var name = msg.match(/!changename ([\AZ]+)/); steamFriends.setPersonaName(name) } }); 

最明显的是他,最下面的是我的。 我究竟做错了什么? 我认为.match()方法在这里使用是错误的,但我不知道用什么来代替它。

如果我理解正确,则需要获取以下string中的!changename username!changename username

以下是“您的”代码的一部分:

 else if (msg.indexOf('!changename') == 0) { var name = msg.match(/!changename ([AZ]+)/i); //Added i flag (Case insensitive if(name) steamFriends.setPersonaName(name[1]); //The username will be in name[1] } 

你不需要转义\A在字符集中, [AZ]就足够了,而且我添加了我相信你需要的i标志,如果你只需要大写字母,就把它移走。

.match可以在那里完美的使用,问题是你需要知道.match返回一个匹配数组。

 var string = "!changename Foo"; var matches = string.match(/!changename ([AZ]+)/i); document.body.innerHTML = "0: " + matches[0] + "<br>1: " + matches[1];