Когда следующий код в моем приложении node.js выполняется, я получаю сообщение об ошибке:
SyntaxError: Недопустимое регулярное выражение: /ha/: Нечего повторять в новом RegExp () в Object.store.findSimilarSongs
Фрагмент app.js:
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();
});
});
функция "findSimilarSongs" в моем store.js:
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.
*
имеет особое значение в регулярном выражении. Имея его в начале, вы поставили его в недопустимое положение. Если вы хотите сопоставить буквальный символ*
, вам нужно экранировать его обратной косой чертой. И поскольку строковые литералы JS используют обратную косую черту в качестве специального символа, вам также нужно экранировать обратную косую черту. Итак,"\\*" + query + "\\*"
- person cookie monster   schedule 19.04.2014