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

时间:2016-02-01 00:52:14

标签: javascript node.js bots steam

我从一个人那里买了一些代码,然后我决定要修改它。首先,它是用Node.js编写的,我对node.js的编程经验非常少(没有),虽然我知道体面的python和一些C#所以我有点理解它。虽然,一旦我想开始编辑代码,我就没有成功复制他所做的事情。

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> (e.g. !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 ([\A-Z]+)/);
    steamFriends.setPersonaName(name)
  }
});

最重要的一个显然是他的,而最底层的是我的。我究竟做错了什么?我认为.match()方法在这里使用是错误的,但我不知道该使用什么而不是它。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要获取以下字符串中的用户名:!changename username

这是&#34;你的&#34;的一部分。代码已修复:

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

您不需要在字符集中转义\A[A-Z]就足够了,我添加了i标记,我认为您需要它,如果你只需要大写字母。

.match可以在那里完美使用,问题是您需要知道.match会返回一系列匹配项。

&#13;
&#13;
var string = "!changename Foo";

var matches = string.match(/!changename ([A-Z]+)/i);

document.body.innerHTML = "0: " + matches[0] + "<br>1: " + matches[1];
&#13;
&#13;
&#13;