1

テストケースは次のとおりです。

db.test.insert({ name: "john"});
db.test.insert({ name: "donny"});
db.test.insert({ name: "lenny"});

db.test.find({ name: { $regex: /^((?!nn)[\s\S])*$/}}); //works fine, returns only john
db.test.find({ name: { $regex: new RegExp("/^((?!nn)[\s\S])*$/")}}); //returns nothing

正規表現は、「nn」を含まないオブジェクトを返すことになっていますが、RegExp オブジェクトを使用すると機能しません。Robomongo を使用してこれをテストしました。

理由はありますか?

4

1 に答える 1

2

/を使用するときは、先頭と末尾の文字を含めないでくださいnew RegExp。これらは、JavaScript のリテラル表記でのみ使用されます。文字列内のバックスラッシュもエスケープする必要があります。

db.test.find({ name: { $regex: new RegExp("^((?!nn)[\\s\\S])*$")}});
于 2014-10-08T15:40:35.957 に答える