javascript - Node.js .match() 方法正确使用吗?

标签 javascript node.js bots steam

我从一个人那里购买了一些代码,然后我决定修改它。首先,它是用 Node.js 编写的,尽管我了解不错的 python 和一点 C#,所以我对 Node.js 的编程经验很少(没有),所以我有点理解它。尽管,当我想开始编辑代码时,我并没有成功地复制他所做的事情。

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() 方法是错误的,但我不知道用什么来代替它。

最佳答案

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

这是“您的”代码已修复的部分:

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 返回一个匹配数组。

var string = "!changename Foo";

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

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

关于javascript - Node.js .match() 方法正确使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121494/

相关文章:

node.js - 有什么方法可以在 Node 中强制执行严格模式?

node.js - Webshot 在 DigitalOcean Ubuntu 14.04 中的 Meteor 上失败

javascript - 如何连接到现有数据库 Sqlite3 node.js

java - selenium如何继续往下一页填充数据?

javascript - 在对象内部的数组上使用的 ng-repeat 重复等于对象元素的数量?

javascript - 如何在 jQuery Mobile 嵌套列表中制作列表?

javascript - 如果路径不存在,Angular 2 如何重定向到 404 或其他路径

javascript - 使用类验证器和 nestjs 验证嵌套对象

javascript - 第一个函数卡在 async.js 中

javascript - Zapier - 切片不是一个有效的函数?