• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Regex - prosty zapis, jak zrobić?

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
634 wizyt
pytanie zadane 20 marca 2016 w JavaScript przez Reaper Nowicjusz (220 p.)
Cześć,

Bardzo proszę o pomoc. Mam wyrażenie 4 znakowe, dwie duże litery i dwie cyfry np: AS09. Chciałbym otrzymywać wartość zwróconą zawsze bez trzeciego znaku czyli: AS9. Jak to zapisać w Regular Expression?

Z góry dziękuję :)

4 odpowiedzi

+3 głosów
odpowiedź 20 marca 2016 przez Comandeer Guru (605,680 p.)
wybrane 20 marca 2016 przez Reaper
 
Najlepsza

Nie wiem po co Ci takie voodoo, ale łap:

'AS09'.replace( /(..)(?:.)(.)/, '$1$2' );

Co robi ten kod? Pobiera 2 grupy znaków: pierwsze 2 znaki ((..)) oraz 4. ((.)). Trzeci znak nie jest przechwytywany, bo jest w tzw. non-capturing group ((?:.)). Żeby z tych grup skorzystać, zamieniam dany string na to, co pobrały te dwie grupy – innymi słowy: korzystam z backreferences ('$1$2').

Można to wyrażenie jeszcze bardziej uprościć wykorzystując liczbę powtórzeń:

'AS09'.replace( /(.{2})(?:.)(.)/, '$1$2' )

 

komentarz 20 marca 2016 przez Reaper Nowicjusz (220 p.)
Cudeńko, bardzo dziękuję :)))
komentarz 21 marca 2016 przez niezalogowany

Dlaczego nie po prostu 

'AS09'.replace(/(..).(.)/, '$1$2')

?

komentarz 21 marca 2016 przez Comandeer Guru (605,680 p.)
W sumie tyż można :D jakoś z non-capturing group wydaje mi się czytelniejszy (co znaczy, że już źle ze mną ;)).
0 głosów
odpowiedź 20 marca 2016 przez ScriptyChris Mędrzec (190,190 p.)

Nie wiem jak z regex i jeśli nie znajdziesz odpowiedzi na to pytanie - to alternatywnie możesz to zrobić w taki sposób:

var napis = 'AS09',
    nowyNapis = '';

for (var i = 0, len = napis.length; i < len; i++)
  {
    if (i === 2)
      continue;
    nowyNapis += napis[i];
  }

console.log(nowyNapis);

 

komentarz 20 marca 2016 przez Reaper Nowicjusz (220 p.)
Bardzo dziękuję ale koniecznie muszę mieć regex. ;)
0 głosów
odpowiedź 20 marca 2016 przez uRTLy Bywalec (2,420 p.)

's/[0]*//g'  spróbuj tego 

komentarz 20 marca 2016 przez Reaper Nowicjusz (220 p.)
Dzięki za szybką odpowiedź ale niestety fałsz. ;(
komentarz 20 marca 2016 przez uRTLy Bywalec (2,420 p.)
sorry też nie ogarnaim tego RegExpa do końca :D
komentarz 20 marca 2016 przez uRTLy Bywalec (2,420 p.)
s/0*(\d+)/$1/; Znalazlem to na stackoverflow nie testowałem ale podobno usuwa 0 przed liczbami, czyli leading 0 
komentarz 20 marca 2016 przez Reaper Nowicjusz (220 p.)
Niestety fałsz. Dziękuję ;)
0 głosów
odpowiedź 21 marca 2016 przez 2Kris Nowicjusz (180 p.)

Witam, wzorzec dopasujesz za pomocą wyrażenia: 

^[A-Z]{2}[0-9]{2}$

Następnie dokonaj operacji na stringu usuwając 3 znak.

Podobne pytania

0 głosów
2 odpowiedzi 208 wizyt
pytanie zadane 27 stycznia 2019 w Java przez kingkushlee Gaduła (3,960 p.)
+2 głosów
3 odpowiedzi 483 wizyt
0 głosów
0 odpowiedzi 764 wizyt
pytanie zadane 29 maja 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)

93,086 zapytań

142,044 odpowiedzi

321,467 komentarzy

62,434 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...