Ich möchte eine dreiteilige Zeichenfolge übereinstimmen. Der erste Teil besteht aus einem oder mehreren a
Zeichen, der zweite Teil besteht aus einem oder mehreren b
Zeichen, und der dritte Teil besteht entweder aus null oder mehr c
Zeichen oder null oder mehr C
Zeichen, aber kein Mix aus c
und .Javascript gierige Regex erscheint nicht-gierig
Als solches Ich schrieb den folgenden regulären Ausdruck:
/a+b+(C*|c*)/
und bemerkte sofort, dass sie die Hinter c
s in der folgenden Zeichenfolge Gierig nicht übereinstimmt:
aaaaabbcc
Umwickeln der inneren Klauseln von der Klausel oder behebt das unerwartete Verhalten nicht:
/a+b+((C*)|(c*))/
Aber interessant sowohl reguläre Ausdrücke passen die folgenden, wobei die C
Zeichen die erste Klausel des Spiels oder:
aaaaabbCC
Der folgende reguläre Ausdruck die Semantik genau erfasst, aber ich möchte, warum die ursprüngliche regulären Ausdruck verstehen verhält sich unerwartet.
/a+b+(([Cc])\2*)?/
Meinst du, es funktioniert nicht, weil das 'c' nicht übereinstimmt? Aber 'C *' tat, deshalb wurde 'c *' nicht einmal getestet. –
Ah, ja - ich sollte das klarstellen – skeggse