Ich versuche, Zeichenfolgen zu entsprechen, die nicht passen das Muster name (CA)
oder barbaz (UK)
. Ich scheine das Problem gelöst zu haben, die Antwort here verwenden, aber das ist, was ich begann mit, und ich frage mich, warum es nicht funktioniert:negierte Lookahead Verwirrung
var r1 = /^.+(?!\([A-Z]{2}\))$/;
r1.test('foo'); //true
r1.test('foo (US)'); //whoops -also true
Von einem negierten Look-Ahead-Lese doc Ich habe gehofft, dass jeder String, dem nicht zB folgt (JP)
würde zu einer Übereinstimmung führen, während alles, was ist gefolgt von z.B. (DE)
würde fehlschlagen. (Nur das erstere wird erfüllt).
Ich dachte, vielleicht war die .+
Art alles, zunichte macht den Look-Ahead „raubend“, so habe ich versucht,
r2 = /^[^()]+(?!\([A-Z]+\))$/;
r2.test('name (US)'); //false
r2.test('foo('); //whoops -also false
aber ich Dinge wie foo(
müssen übereinstimmen.
Warum scheiterte mein erster Versuch?
Danke für den Link. Könnten Sie näher erläutern, wie Sie $ verwendet haben? – KnewB
Es wird einfach verwendet, um sicherzustellen, dass '(XX)' nur am Ende des Strings und nicht irgendwo in der Mitte abgeglichen wird, also wäre 'Hello (XX) World' gültig. –
Cool Ich denke, dass deckt die eine in der Lookahead, aber dann gibt es '. + $' Am Ende? – KnewB