我的msg.text = /start 76198769
/开始+空格+ 76198769

如果msg.text = / start + 76198769然后Temp = 76198769,我该如何设置条件?

我的意思是,我想获得76198769

await bot.sendMessage(msg.chat.id, `telegram.me/myBot?start=${msg.chat.id}`, opts);

最佳答案

有几种方法可以做到。最简单的方法可能就是拆分字符串。

let vals = msg.text.split(' '); // yields an array of '/start', '76198769'
let temp = null;
if(vals[0] === '/start' && vals[1] === '76198769') {
  temp = parseInt(vals[1]);
}


或者使用Regex,您可以

let matches = /\/start\s(\d+)/g.exec(msg.text);
let temp = null;
if(matches.length) {
  temp = parseInt(matches[1]);
}


只是为了好玩,我指出我在这里建议的内容也可以扩展。例如,如果您有要使用的命令列表,则可以对其进行测试,然后将该命令路由到其他代码。

假设您有“开始”,“停止”,“信息”之类的命令。如果您这样创建一个对象(也许通过Node中的require):

const commands = {
  'start' : function(args) { /* handle start */},
  'stop' : function(args) { /* handle stop */},
  'info' : function(args) { /* handle info */}
};


您可以构造您的正则表达式并按以下方式获取它:

const regex = /\/(start|stop|info)\s(\d+)/g;
let command = null;
let args = null;
let matches = regex.exec(msg.text);
if(matches.length) {
  command = matches[1];
  args = parseInt(matches[2]);
}


然后,您可以使用commands[command](args);执行命令

如果确实需要,甚至可以通过连接命令对象的键来从字符串构造正则表达式,但是我将作为练习留给您。 :)

10-04 16:28