1

API 呼び出しの応答をアサートするために RegEx を使用していますが、現在は少し「貪欲」すぎて、あらゆる種類の応答に一致してしまいます。応答内の実際の ID は毎回異なるため、RegEx ビットが必要です。

正規表現のアサーションは次のとおりです。

{data:\[{"name":"Mat","~id":"(.*)"},{"name":"Laurie","~id":"(.*)"}\]},"something":true}

次の正しい応答に一致するもの:

{data:[{"name":"Mat","~id":"4fd5ec146fc2ee0fff234234"},{"name":"Laurie","~id":"4fd5ec146fc2ee0fff234227"}]},"something":true}

この誤った応答と同様に:

{data:[{"name":"Mat","~id":"4fd5ec146fc2ee0fff234234"},{"name":"Laurie","~id":"4fd5ec146fc2ee0fff234227"},{"name":"John","~id":"4fd5ec146fc2ee0fff234237"},{"name":"Paul","~id":"4fd5ec146fc2ee0fff234238"},{"name":"George","~id":"4fd5ec146fc2ee0fff234239"}]},"something":true}

2 つ目(.*)は、2 つ目のアイテムの ID と一致するだけでなく、ID他のすべての不要なオブジェクトも一致しています。

したがって、フィールドに関しては、正規表現をもう少し厳密にする必要があると思い~idます。(.*)ID は常に 24 文字の 16 進数なので、より適切なものに置き換えたいと思います。

4

2 に答える 2

3

ID フィールドの代わりに[^"]*[^"]{24}またはを使用できます。[0-9a-fA-F]{24}.*

于 2012-06-11T13:32:12.700 に答える
3

.(ドット) 正規表現のドットは任意の 1 文字に一致する特殊文字であるため (例外は改行文字)、すべてに一致します。

この RegEx を使用して、常に 24 個の 16 進文字のみに一致させる必要があります。

^[A-Fa-f0-9]{24}$

平和

于 2012-06-11T13:39:44.490 に答える