0
を否定しました。私は答えhereを使用して問題を解決しているように見えるが、これは私が始めたもので、それが動作しない理由を私は思ったんだけど:は、私は<em>が</em>パターン<code>name (CA)</code>または<code>barbaz (UK)</code>に合わない文字列に一致するようにしようとしている先読み混乱
var r1 = /^.+(?!\([A-Z]{2}\))$/;
r1.test('foo'); //true
r1.test('foo (US)'); //whoops -also true
否定先読みdocを読んでから、私はどんなことを期待していました例えば、後に続く文字列(JP)
が一致し、のいずれかがであり、それに続いて(DE)
は失敗します。 (前者のみが満たされている)。
.+
は一種の、すべてを「消費する」先読みを無効化していたと思ったので、私が一致する
foo(
のようなものが必要しかし、私は
r2 = /^[^()]+(?!\([A-Z]+\))$/;
r2.test('name (US)'); //false
r2.test('foo('); //whoops -also false
を試してみました。
私の最初の試みはなぜ失敗しましたか?
ありがとうございます。あなたは$の使い方を詳しく説明できますか? – KnewB
'(XX)'は文字列の最後にのみ一致し、途中ではないので、 'Hello(XX)World'が有効であることを保証するために使用されます。 –
私は先読みの内側をカバーしていると思いますが、最後に '。+ $'がありますか? – KnewB