/ / Regulár Javascript na extrahovanie určitej časti reťazca - javascript, regex, string, nahradiť

Javascript regex pre extrakciu niektorých častí reťazca - javascript, regex, string, replace

Potrebujem extrahovať určitú časť reťazca Javascript. Myslel som, že to urobím s regex, ale nemohol prísť s tým, ktorý to robí správne.

Reťazec môže mať premenlivú dĺžku a môže obsahovať všetky možné znaky vo všetkých možných kombináciách.

Z toho musím extrahovať 10 susedných znakov, ktoré zodpovedajú jednej z nasledujúcich dvoch možných kombinácií:

  1. 9 číslic a 1 písmeno „X“ (veľké písmeno „X“, nie X ako variabilné písmeno!)
  2. 10 čísel

Ak je teda vstupný reťazec tento: „[1X,!? X22; 87654321X9] ddee“, mal by sa vrátiť iba „87654321X9“.

Dúfam, že som to vysvetlil dosť dobre. Ďakujem vopred!

odpovede:

3 pre odpoveď č. 1

Tento Regex bude fungovať:

d{9}X|d{8}Xd|d{7}Xd{2}|d{6}Xd{3}|d{5}Xd{4}|d{4}Xd{5}|d{3}Xd{6}|d{2}Xd{7}|d{1}Xd{8}|d{10}|Xd{9}

Ako je opísané, musí sa zhodovať s 9 číslicami a akýmkoľvek písmenom a písmeno môže byť na ľubovoľnej pozícii v poradí.

d{9}X # will match 9 digits and a letter in the end
d{8}Xd # will match 8 digits a lettter then a digit again
...
d{1}Xd{8} # will match 1 digits a lettter then 8 digits
{10} # will match 10 digits

Upravené tak, aby sa zhodovalo iba s X


2 pre odpoveď č. 2

Môžete použiť tento oveľa jednoduchší regulárny výraz:

/(?!d*Xd*X)[dX]{10}/

RegEx Breakup:

(?!d*Xd*X)  # negative lookahead to fail the match if there are 2 X ahead
[dX]{10}     # match a digit or X 10 times

Pretože viac ako jeden X nie je povolený z dôvodu použitia negatívneho hľadáčika, tento regulárny výraz povoľuje iba 10 číslic alebo ekse 9 číslic a jednu X.

RegEx Demo

Tento regex má oproti druhej odpovedi niekoľko výhod:

  • Oveľa jednoduchší regulárny výraz, ktorý je ľahšie čitateľný a udržiavateľný
  • Vykoná sa menej ako polovica krokov, čo môže byť podstatný rozdiel pri väčšom texte.