Próbuję napisać wyrażenie regularne, które pasuje do strun podobnych do tych poniżej:

Yu MSBE26
w AWAQBNL

Używam JavaScript i wymyśliłem następujące wyrażenie regularne:

(.*?(?:[AWMS\d]{2})[AWMS\d]{2}[A-Z]{2}[\dA-Za-z]{1,3})

W słówach zaczynam wyłączoną grupę przechwytywania, dopasowując się do wzoru [AWMS\d]{2}, a następnie pasuję do wzoru [AWMS\d]{2}, który następuje i wreszcie [\dA-Za-z]{1,3} pasować do ostatnich dwóch lub trzech znaków.

Z tego, co przeczytałem, powinno to działać, ale nie dostaję żadnych dopasowań.

Na przykład, gdy korzystam z testera REGEX Nie otrzymuję żadnych dopasowań: próbki

1
Mutuelinvestor 15 sierpień 2014, 07:42

2 odpowiedzi

Najlepsza odpowiedź

Usuń drugą [AWMS\d]{2} - Wygląda na przypadkowe dodatek i jest powodem, dla którego REGEX nie Praca:

(.*?(?:[AWMS\d]{2})[A-Z]{2}[\dA-Za-z]{1,3})

Edytuj: Nawet nie potrzebujesz Non Capture Group, wystarczy wsporniki kwadratowe:

(.*?[AWMS\d]{2}[A-Z]{2}[\dA-Za-z]{1,3})
1
Robbie Averill 15 sierpień 2014, 03:49

Twój Regex nie pasuje do twoich wartości, ponieważ po prostu nie pasują.

Twój wzór to:

(.*?(?:[AWMS\d]{2})[AWMS\d]{2}[A-Z]{2}[\dA-Za-z]{1,3})

Yu MSBE26
     ^--- fails here
w AWAQBNL
     ^--- fails here

BTW, możesz użyć regexa, aby dopasować się do swoich ciągów:

(.*?[AWMS\d]{2}[A-Z]{2}[\dA-Za-z]{1,3})

Demo robocze

0
Federico Piazza 15 sierpień 2014, 03:50