代码之家  ›  专栏  ›  技术社区  ›  user8869741

如何使用match和regex返回变量的内容?

  •  2
  • user8869741  · 技术社区  · 7 年前

    'use strict'
    
    const Telegraf = require('telegraf')
    const fs = require('fs')
    
    var ar1 = fs.readFileSync('folder/ar1.txt').toString()
    var ar2 = fs.readFileSync('folder/ar2.txt').toString()
    var ar3 = fs.readFileSync('folder/ar3.txt').toString()
    

    app.hears(/\bar\d/i, (ctx) => {
        ctx.reply(ctx.match[0])
        //Returns: "ar1"
    })
    

    但这只返回字符串,而不是变量的内容。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Sterling Archer    7 年前

    能够 使用 eval 在这里,但我不建议这样做。相反,我建议你映射你的变量。

    const files = {
        "ar1" : fs.readFileSync('folder/ar1.txt').toString(),
        "ar2" : fs.readFileSync('folder/ar2.txt').toString(),
        "ar3" : fs.readFileSync('folder/ar3.txt').toString()
    };
    

    然后,您可以使用找到的字符串用对象键(a)进行回复 Map 也可以在此处使用)

    app.hears(/\b(a+)r\d/i, (ctx) => {
        ctx.reply(files[ctx.match[0]]);
        //now returns the file
    });