W wyrażeniu regularnym muszę wiedzieć, jak dopasować jedną lub drugą rzecz lub obie te wartości (w kolejności). Ale przynajmniej jedna z rzeczy musi tam być.W wyrażeniu regularnym pasuje do jednej rzeczy lub do obu.
Na przykład poniższe wyrażenie regularne
/^([0-9]+|\.[0-9]+)$/
dopasuje
234
i
.56
ale nie
234.56
Choć poniższe wyrażenie regularne
/^([0-9]+)?(\.[0-9]+)?$/
dopasuje wszystkie trzy z powyższych ciągów, ale również dopasować pusty ciąg, który nie chcemy.
Potrzebuję czegoś, co będzie pasowało do wszystkich trzech powyższych strun, ale nie do pustej struny. Czy istnieje prosty sposób na zrobienie tego?
UPDATE:
Zarówno Andrew i Justin poniżej pracy na uproszczonym przykładzie I, pod warunkiem, ale nie (chyba że się mylę) pracować dla rzeczywistego przypadku użycia, że miałem nadzieję rozwiązać, więc powinienem to teraz załączyć. Oto rzeczywisty regexp Używam:
/^\s*-?0*(?:[0-9]+|[0-9]{1,3}(?:,[0-9]{3})+)(?:\.[0-9]*)?(\s*|[A-Za-z_]*)*$/
To będzie pasował
45
45.988
45,689
34,569,098,233
567,900.90
-9
-34 banana fries
0.56 points
ale nie pasuje
.56
i muszę to aby to zrobić.
Jaki język/smak regex? –
Używam JavaScript. – rharrington
Twoja edycja komplikuje sytuację, ale nadal możesz to zrobić w prosty sposób, szczególnie jeśli najpierw podzielisz na spacje. Zobacz moją edycję. –