Citat:
Ursprungligen postat av
fyma
Vi är nästan där
Jag vill att den ska kunna matcha strängen text5169201test1234567
Men om jag använder [0-9]{7} så matchas även 1234567891011, vilket jag inte vill.
Däremot om strängen är 1234567891011ochSedanLiteAndraTecken1234567 så ska den matcha.
Lite förvirrande vad det är du vill ha ut. Först skrev du "alla strängar som innehåller 7 siffror". Det verkar dock som att du vill matcha alla strängar som har minst en sekvens av exakt 7 siffror, omgivna av icke-siffror eller start/slut av strängen. Korrekt? I sådana fall kan du använda dig av lookahead och lookbehind på följande sätt:
Kod:
.*(?<!\d)(\d{7})(?!\d).*
I tal står det ungefär "0 eller fler av vad som helst, följt av sju siffror som föregås och följs av någonting som inte är en siffra, och sedan 0 eller fler av vad som helst". Notera att lookaheads och lookbehinds är rätt dyra, så det kan vara mer effektivt att köra på någonting i stil med detta istället (om prestanda är relevant):
Kod:
.*([^\d]|^)(\d{7})([^\d]|$).*
Här står det istället "0 eller fler av vad som helst, följt av något som inte är en siffra ELLER början av strängen, följt av sju siffror, följt av någonting som inte är en siffra ELLER slutet av strängen, följt av 0 eller fler av vad som helst".
Har inte direkt tänkt tänkt detta superordentligt men jag tror att det borde fungera.
OBS:
\d är ekvivalent med
[0-9]
EDIT: För att göra det tydligt att man vill matcha hela strängen bör man lägga till
^ i början och
$ i slutet av sitt regex. Det spelar dock ingen egentlig roll här då båda dessa antingen kommer matcha hela strängen eller ingenting av den, pga
.* i början och slut.
EDIT2: Missade att du ville radera allt i strängen som inte innehåller de sju siffrorna. Det går inte att radera någonting ur en sträng då strängar är immutable, men du bör kunna plocka ut gruppen i mitten (paranteser i regex skapar en grupp, jag parantesade ihop 7-siffrorsmatchningarna) på något sätt. Jag kan inte JS så vet inte exakt hur, men det bör vara enkelt.