2012-05-31 17 views
12

mam długi ciąg w javascript jakDopasowanie do łańcucha Regex?

var string = 'abc234832748374asdf7943278934haskhjd';

próbuję dopasować jak

abc234832748374 - czyli - Próbowałem jak

string.match(\abc[^abc]|\def[^def]|) ale że robi zrozumcie mnie oba ciągi ponieważ potrzebuję numerów po nich?

Po prostu potrzebuję abc + 8 znaków po i def znaków 8-11 po? Jak mogę to zrobić ?

Odpowiedz

25

Jeśli chcesz dosłowne ciągi abc lub def następnie przez 8-11 cyfr, trzeba coś takiego:

(abc|def)[0-9]{8,11} 

można go przetestować tutaj: http://www.regular-expressions.info/javascriptexample.html

należy pamiętać, że jeśli nie chcesz, aby dopasować więcej niż 11 di gits, będziesz potrzebować kotwicy (lub [^0-9]) na końcu napisu. Jeśli jest to tylko 8 lub więcej, możesz zastąpić {8,11} przez {8}.

1

Możesz dopasować abc[0-9]{8} dla ciągu abc, a następnie 8 cyfr.

Jeżeli pierwsze trzy znaki są arbitralne i 8-11 cyfr po tym, spróbuj [a-z]{3}[0-9]{8,11}

1

Użyj poniżej regex, aby uzyskać dokładne dopasowanie,

string.match(/(abc|def)\d{8,11}/g); 

Koniec z g

"g" globalnego

"i" dla ignoreCase

"m" dla wielowierszowego

9

Do opracować na już wysłana odpowiedź, trzeba globalną mecz, co następuje:

var matches = string.match(/(abc|def)\d{8,11}/g); 

ta pasuje do wszystkich podzbiorów napisu, który:

  • start z „abc” lub „def”. Jest to część "(abc | def)"
  • Następnie następuje 8-11 cyfr. To jest część "\ d {8,11}". \ d dopasowuje cyfry.

Flaga "g" (globalna) przedstawia listę wszystkich dopasowań, a nie tylko pierwszą.

W pytaniu pytałeś o 8-11 znaków zamiast cyfr. Jeśli nie ma znaczenia, czy są cyframi czy innymi znakami, możesz użyć "." zamiast "\ d".

Zauważyłem również, że każdy z przykładowych meczów ma więcej niż 11 znaków po "abc" lub "def". Jeśli jakakolwiek ilość cyfr zrobi, wówczas następujące regex może być lepiej przystosowane:

  • dowolna liczba cyfr - var matches = string.match(/(abc|def)\d*/g);
  • co najmniej jedną cyfrę - var matches = string.match(/(abc|def)\d+/g);
  • Przynajmniej 8 cyfr - var matches = string.match(/(abc|def)\d{8,}/g);
+1

+1, aby poświęcić czas na napisanie wyjaśnienia! –

Powiązane problemy