【问题标题】:Getting a SyntaxError when using a variable with a RegExp使用带有 RegExp 的变量时出现 SyntaxError
【发布时间】:2014-04-19 18:46:41
【问题描述】:

当我的 node.js-application 中的以下代码被执行时,我收到一条错误消息:

SyntaxError: Invalid regular expression: /ha/: Nothing to repeat at new RegExp () at Object.store.findSimilarSongs

app.js sn-p:

app.get('/search', function (req, res, next) {

    store.findSimilarSongs(req.query.search, function (err, songs) {
        if (err) {
            res.writeHead(500, "An Error occurred");
            next(err);
        }
        else {
            res.writeHead(200, {
                'Content-Type': 'application/json'
            });
            res.write(JSON.stringify(songs));
            searchQuery=[];
        }
        res.end();
    });
});

我的 store.js 中的函数“findSimilarSongs”:

findSimilarSongs: function (query, callback) {
        db.music.find({$or:[{'title': new RegExp("*"+query+"*", "i")},{'interpret': new RegExp("*"+query+"*", "i")}]}, callback);
    }

我对正则表达式非常陌生,尤其是与 mongodb/mongoskin 结合使用。 在错误发生之前,一切正常。 错误消息中提到的 ha 正是我在搜索栏中输入的内容。

遗憾的是,除了 javascript/jquery、node.js(modules:express, mongoskin) 和 mongodb,我没有其他方法可以选择执行此任务。

【问题讨论】:

  • A * 在正则表达式中有特殊含义。通过在开头使用它,您已将其置于无效位置。如果您想匹配文字 * 字符,则需要使用反斜杠对其进行转义。由于 JS 字符串文字使用反斜杠作为特殊字符,因此您也需要转义反斜杠。所以"\\*" + query + "\\*"

标签: javascript regex node.js mongodb mongoskin


【解决方案1】:

它说“没有什么可重复的”,因为您构造的正则表达式是/*hal*/。这绝对是无效的——你不能从repetition operator 开始。我猜你要么想要一个模糊匹配:

new RegExp(".*"+query+".*, 'i')

或一个字面上的星星:

new RegExp("\\*"+query+"\\*", 'i')

【讨论】:

  • 测试了你的两个版本,但得到了同样的错误:SyntaxError: Invalid regular expression: /*ma*/: Nothing to repeat at new RegExp ()
猜你喜欢
  • 2013-12-27
  • 2021-10-12
  • 2019-09-10
  • 2016-10-12
  • 2021-08-27
  • 2015-08-01
  • 2018-07-08
  • 1970-01-01
  • 2021-07-07
相关资源
最近更新 更多