De taak die me dit deed bouwen was saai, en dat is precies waarom het de moeite waard was om te automatiseren Een klant overhandigde me een export van 4.000 regels waarbij elke datum in Amerikaanse stijl werd geschreven 01/15/2024, en het systeem waarin het ging wilde ISO, 2024-01-15. Een gewone find-and-replace kon er niet aan komen, omdat er geen vaste string was om naar te zoeken - de data waren allemaal verschillend. Wat ze deelden was een maken: twee cijfers, een schuine streep, twee cijfers, een schuine streep, vier cijfers Dat is precies het soort ding dat een reguliere expressie overeenkomt, en precies het soort ding dat een regex-vervanging in één keer herschrijft Ik heb het bestand in een krastool geplakt, één expressie geschreven en het hele export-omgedraaide formaat in minder dan een seconde.
Dat is de baan de vrije Regex Vervang tool wel, en deze gids is de lange versie van hoe je het goed kunt gebruiken Ik zal behandelen wat een regex vervanging eigenlijk is, hoe capture group backreferenties je tekst laten herstructureren in plaats van alleen maar te verwijderen, wat elk speciaal vervangingstoken betekent, en de fouten die mensen laten struikelen Het zit naast de regex-tester Ik schreef over apart - de tester vertelt je wat een patroon overeenkomt, en deze tool herschrijft wat het overeenkwam Als reguliere expressies zelf nieuw voor je zijn, begin dan met de volledige handleiding voor codeerhulpmiddelen en kom terug.
tl;dr: Een regex-vervanging matcht tekst voor patroon en herschrijft elke overeenkomst met behulp van een vervangende tekenreeks. Wikkel de onderdelen die u wilt hergebruiken tussen haakjes om genummerde groepen te maken en verwijs ze vervolgens in de vervanging door
$1,$2, enzovoort - het patroon(\d{4})-(\d{2})-(\d{2})met vervanging$3/$2/$1draait2024-01-15per15/01/2024. Zet degvlag om elke wedstrijd te vervangen, laat de vervanging leeg om overeenkomsten te verwijderen en te gebruiken$<name>voor benoemde groepen De Regex Vervang tool draait volledig in uw browser en toont de vervangingstelling live.
Wat is een regex vervanging?
Een gewone find-and-replace werkt op letterlijke tekst: je typt het exacte woord dat je zoekt en het exacte woord dat je daarvoor in de plaats moet zetten Het mislukt op het moment dat het ding dat je wilt veranderen geen vaste string is maar een patroon - een datum in een van de honderd vormen, een telefoonnummer, een HTML-tag, een achterliggende whitespace run, een variabele naam die een conventie volgt Een reguliere expressie beschrijft dat patroon, en een regex-vervanging koppelt het aan een sjabloon die zegt hoe elke match herschreven moet worden.
Het mechanisme heeft twee helften De patroon is een reguliere expressie waarmee de engine je tekst scant, elke plaats waar de vorm voorkomt vinden De vervanging is een string die voor elke match wordt vervangen In het eenvoudigste geval is de vervanging platte tekst en wordt elke match hetzelfde - handig voor het normaliseren van bijvoorbeeld elke run van tabbladen en spaties in één enkele spatie. Het krachtige geval is wanneer de vervanging terugverwijst naar delen van wat werd gematcht, dus de uitvoer wordt opgebouwd uit de invoer in plaats van een vaste constante te zijn. Dat is wat een regex-vervanging verandert van een botte delete-and-retype in een echt herstructureringstool.
Onder de kap, de Regex Vervang tool gebruikt het JavaScript RegExp motor en de String.prototype.replace methode die elke browser en Node.js verzendt Dat is om een praktische reden belangrijk: het gedrag dat u in de tool ziet, is identiek aan het gedrag dat u krijgt als u hetzelfde patroon en dezelfde vervanging in uw eigen JavaScript- of TypeScript-code plakt. Er is geen aparte smaak om te leren en geen verrassing als u van de krastool naar de productie gaat. De vervangende syntaxis die de tool accepteert - $1, $&, $<name> en de rest is de exacte syntaxis die de standaard definieert, gedocumenteerd op MDN's String.vervang referentie.
Hoe werken backreferenties van groepen vastleggen?
Dit is het meest bruikbare idee bij het vervangen van regex, en het is de moeite waard om te vertragen. Wanneer u een deel van een patroon tussen haakjes plaatst, maakt u een capture group. De engine onthoudt de tekst die de groep overeenkwam en nummert de groepen van links naar rechts, beginnend bij één. In de vervangende tekenreeks, $1 betekent " voeg alles in wat de eerste groep heeft vastgelegd, " $2 de tweede, enzovoort tot $99.
Het datumvoorbeeld maakt het concreet Het patroon (\d{4})-(\d{2})-(\d{2}) heeft drie groepen: het viercijferige jaar, de tweecijferige maand en de tweecijferige dag. Wanneer het overeenkomt 2024-01-15, groep één houdt 2024, groep twee houdt stand 01, en groep drie houdt stand 15. Een vervanging van $3/$2/$1 monteer vervolgens een nieuwe snaar uit die stukken in een andere volgorde en met verschillende scheiders, waardoor 15/01/2024. Niets werd verwijderd en opnieuw getypt - de uitvoer wordt letterlijk opnieuw opgebouwd uit de vastgelegde fragmenten De tokens opnieuw ordenen, de interpunctie ertussen wijzigen, ze in andere tekst verpakken, en u hebt elke datum in het bestand opnieuw geformatteerd met één expressie.
Genoemde groepen zijn hetzelfde idee met leesbare labels In plaats van haakjes te tellen, schrijf je (?<year>\d{4}) en in de vervanging verwijzen naar als $<year>. Voor een patroon met twee of drie groepen zijn de cijfers prima, maar als je eenmaal met vijf of zes jongleert, maken namen zowel het patroon als de vervanging veel gemakkelijker te lezen en later te veranderen. Het gereedschap ondersteunt beide door elkaar, zodat je kunt mixen $1 en $<name> in dezelfde vervanging als je wilt Wanneer je voor het eerst een patroon aan het samenstellen bent en nog niet zeker weet welke groepen je nodig hebt, is de Regex-bouwer helpt u het stuk voor stuk te construeren voordat u het hierheen brengt om de vervanging uit te voeren.
Wat betekenen de speciale vervangende tokens?
Het dollarteken is speciaal binnen een vervangende tekenreeks, en het introduceert een kleine set tokens buiten de genummerde en benoemde groepen. Als je ze kent, kun je niet naar een ingewikkelder patroon grijpen dan je nodig hebt.
$& voegt de volledige overeenkomende subtekenreeks in Het is wat u wilt als u overeenkomsten inpakt of annoteert in plaats van ze opnieuw op te bouwen - een patroon van \b\w+@\w+\.\w+\b met een vervanging van <$&> zet hoekhaken rond elk e-mailadres zonder dat je het geheel in een groep hoeft vast te leggen. $\`` (a backtick) inserts everything *before* the match, and $'(an apostrophe) inserts everything *after* it; these are rarely needed but occasionally exactly right. And because$is special, outputting a literal dollar sign requires doubling it:$$in the replacement produces a single$` in the output, which matters the day you are reformatting currency.
Er is één deletie-idioom dat de moeite waard is om in het geheugen te zetten: een lege vervanging verwijdert elke match Met de globale vlag aan en het veld Vervangen leeg gelaten, verwijdert de tool elke keer dat het patroon voorkomt uit de tekst Dat is de schoonste manier om iets te strippen - alle HTML-tags met <[^>]+>, elke achterliggende ruimte met +$ in de multiline-modus worden alle niet-cijfers van een telefoonnummer weergegeven \D. U vervangt niet door een spatie of een tijdelijke aanduiding; je vervangt door niets en de wedstrijd verdwijnt gewoon.
Welke vlaggen zijn belangrijk voor een vervanging?
De vlaggen op een regex veranderen hoe het wordt toegepast, en twee ervan domineren het dagelijkse vervangingswerk. De rest is situationeel maar soms doorslaggevend.
De mondiale vlag, g, is degene die je het meest zult schakelen. Zonder dit, JavaScript's replace wijzigingen alleen de liever match en laat de rest van de tekst met rust - dit is standaard String.replace gedrag en verrast mensen die een vervangingsalles verwachten Draai g aan en elke match in de tekst wordt herschreven De tool standaard naar global on, want alles vervangen is wat mensen bedoelen negentien van de twintig keer, maar de toggle is er voor de keren dat je echt aan wilt raken alleen de eerste keer De ignore-case vlag, i, zorgt ervoor dat het patroon overeenkomt, ongeacht de letterkast, dus error ook wedstrijden Error en ERROR - essentieel als u logniveaus normaliseert of inconsistente hoofdletters opruimt.
De meerlijnige vlag, m, verandert wat de ankers zijn ^ en $ bedoel: met het aan, passen ze het begin en het einde van elk regel in plaats van van de hele tekst, wat je wilt als je achterliggende witruimte strippen of elke regel vooraf te voegen De dotAll-vlag, s, laat de punt overeenkomen met nieuwregeltekens, zodat een patroon lijnonderbrekingen kan overspannen - handig voor het herschrijven van blokken met meerdere regels De u (unicode) en y (plakkerige) vlaggen zijn voor geavanceerde gevallen: u maakt een correcte omgang met tekens buiten het basisvlak en bepaalde ontsnappingsvormen mogelijk, en y ankers elke wedstrijd proberen naar de exacte positie na de vorige De onderstaande vergelijkingstabel geeft een overzicht wanneer iedereen zijn plaats verdient.
| kwijnen | Letter | Effect op een vervanging | Typisch gebruik |
|---|---|---|---|
| wereld- | g |
Vervang elke wedstrijd in plaats van alleen de eerste | Bijna elke vervang-alles |
| Zaak negeren | i |
Match ongeacht lettergeval | Normaliseren van logniveaus, opruimen van hoofdletters |
| Multiline | m |
^ en $ anker aan elke lijn |
Voorvoegsels van lijnen, het strippen van achterruimtes |
| DotAll | s |
De stip komt ook overeen met nieuwe regels | Multi-line blokken herschrijven |
| Unicode | u |
Correcte omgang met astrale karakters en \u{...} |
Emoji, niet-Latijnse schriften |
| Kleverig | y |
Wedstrijd alleen op de huidige positie | Tokenisers, strikte sequentiële parsering |
Wanneer moet ik regex vervangen gebruiken in plaats van een gewone find-and-replace?
De scheidslijn is simpel: gebruik een gewone find-and-replace als je de exacte tekst kent, en reik naar regex replace als je de vorm kent maar niet de exacte tekst Als je elke 2023 tegen 2024, een gewone vervanging is sneller en veiliger Als je elk viercijferig jaar verandert ongeacht de waarde, kan alleen een patroon dat uitdrukken.
Drie taakfamilies vallen duidelijk aan de regexkant De eerste is herformatteren, waarbij de inhoud hetzelfde blijft maar de indeling ervan verandert - data, telefoonnummers, namen geschreven & quot; Laatste, eerste" die u wilt als " Eerste laatste." Groepen vastleggen plus een opnieuw geordende vervanging, verwerken al deze. De tweede is bulk strippen, waarbij je alles verwijdert dat overeenkomt met een patroon - tags, opmerkingen, controletekens, extra witruimte - door te vervangen door niets. De derde is voorwaardelijke bewerking op schaal, waar u elke keer dat een patroon voorkomt, inpakt, vooraf plaatst of annoteert, met behulp van $& om de match te behouden en eraan toe te voegen Wanneer de transformatie die u aan uzelf beschrijft het woord & quot; every" gevolgd door een beschrijving in plaats van een letterlijke string, bevindt u zich in regex-vervang gebied.
Er is ook een workflow argument Deze bewerkingen uitvoeren in uw code editor' s find-and-replace werkt, maar het bewerkt het bestand op zijn plaats, wat betekent dat een fout een fout is in uw echte bestand Als u de transformatie in een scratch tool uitvoert, ziet u eerst de uitvoer en de vervanging telt voordat u iets vastlegt, en plakt u vervolgens het geverifieerde resultaat terug Omdat de Regex Vervang tool draait volledig in uw browser en uploadt nooit wat u plakt, het is veilig om te gebruiken, zelfs als de tekst een productielogboek of een klantenexport is - een punt dat ik volledig maak in de dataprivacygids voor online tools.
Wat zijn de veelgemaakte fouten bij regex vervangen?
De meest voorkomende is het vergeten van de mondiale vlag en je afvragen waarom alleen de eerste wedstrijd veranderde Als je vervanger bijna niets lijkt te hebben gedaan - één bewerking waarbij je er tientallen had verwacht - controleer dat dan g is aan. Het is zo'n veel voorkomende trip dat de tool standaard aanstaat, maar op het moment dat je het uitschakelt om een enkele match te targeten, vergeet dan niet om het terug te draaien.
De tweede is een letterlijke $1 verschijnen in de uitvoer waar je vastgelegde tekst verwachtte Dat betekent bijna altijd dat de groep waarnaar je verwijst niet bestaat - je patroon heeft geen eerste set haakjes, dus er is niets voor $1 om in te vallen voor, en de motor laat het token zoals het is De oplossing is om het onderdeel dat u wilt hergebruiken tussen haakjes te wikkelen om de groep te maken, en om groepen van links te tellen die beginnen bij één Een gerelateerde valstrik is verkeerd tellen wanneer uw patroon geneste of optionele groepen heeft; wanneer de nummering verwarrend wordt, schakelt u over naar benoemde groepen, zodat de verwijzing ondubbelzinnig is.
De derde fout is een patroon dat meer overeenkomt dan je bedoelde, meestal omdat een kwantor hebzuchtig is. Een patroon als <.+> bedoeld om één HTML-tag te matchen, komt deze vanaf de eerste graag overeen < naar de voldoende zijn > op de lijn, alles tussen twee tags doorslikken De remedie is een niet-hebzuchtige kwantificator, <.+?>, of een preciezere tekenklasse, <[^>]+>. Dit is precies de situatie waarin u het patroon in de regex-tester kijk eerst wat het benadrukt, en pas daarna de vervanging uitvoeren - een gewoonte regex-tester gids loopt er uitgebreid doorheen De vervangingstelling die in de tool wordt weergegeven, is uw andere beveiliging: als deze veel meer of veel minder vervangingen rapporteert dan het aantal dingen dat u wilde veranderen, is het patroon verkeerd, niet het gereedschap.
Een uitgewerkt voorbeeld: namen opnieuw formatteren en ruis strippen
Laat me een kleine klus van begin tot eind doorlopen, want als je de stukken samen ziet werken, wordt het idee beter opgelost dan welke regel dan ook. Stel dat je een lijst met contacten hebt geëxporteerd als Doe, Jane en Smith, John, één per regel, en je wilt ze als Jane Doe en John Smith.
De vorm van elke regel is: enkele woordtekens, een komma, een spatie, dan meer woordtekens Als patroon welteverstaan (\w+), (\w+), waarbij de achternaam is vastgelegd in groep één en de voornaam in groep twee. De vervanger die ze verwisselt en de komma laat vallen is $2 $1 - groep twee, een spatie, groep één. Plak de lijst in de Regex Vervang tool, voer dat patroon en vervanging in, laat de globale vlag aan staan en elke regel wordt omgedraaid naar " Eerste laatste" in één keer De vervangingstelling vertelt u hoeveel regels zijn aangeraakt, wat u kunt controleren op gezond verstand aan de hand van het aantal contacten.
Zeg nu dat dezelfde export achterblijvende witruimte heeft op sommige lijnen die je ook weg wilt hebben Dat is een tweede, aparte vervanging: patroon +$ met de multiline vlag erop dus $ komt overeen met het einde van elke regel, en een lege vervanging zodat de overeenkomende spaties worden verwijderd in plaats van vervangen Voer het uit na de naamswisseling en het bestand is schoon De twee-pass benadering - één vervanging om te herstructureren, één om te strippen - is typisch, en omdat elke pas je zijn uitvoer toont en telt voordat je het kopieert, raad je nooit of de transformatie deed wat je bedoelde Wanneer de opnieuw vormgegeven tekst een laatste visuele diff nodig heeft ten opzichte van het origineel om te bevestigen dat er niets anders is verplaatst, plak je beide versies in de tekst diff gereedschap. Voor de bredere kit van alledaagse hulpprogramma's waarin dit past, is de Webontwikkelaar Toolkit verzamelt degene die ik voor de meesten bereik.
Veelgestelde vragen
Hoe vind en vervang ik online een reguliere expressie? Voer uw patroon in het veld Zoeken in zonder schuine strepen, schrijf de vervanging in het veld Vervangen, kies uw vlaggen en plak uw tekst De herschreven uitvoer verschijnt direct en laat zien hoeveel vervangingen er zijn uitgevoerd Alles gebeurt in uw browser, dus er wordt niets geüpload.
Hoe werken backreferenties van capturegroepen in de vervanging?
Tussen haakjes in je patroon maken genummerde groepen, en je hergebruikt ze in de vervanging met $1, $2, enzovoort. Bijvoorbeeld het patroon (\d{4}) - (\d{2}) - (\d{2}) met de vervanging $3/$2/$1 verandert 2024-01-15 in 15/01/2024. Genoemde groepen zoals (?
Hoe vervang ik alle wedstrijden in plaats van alleen de eerste? Schakel de g (globale) vlag in Zonder vervangt JavaScript alleen de eerste match, precies zoals de String.replace methode zich gedraagt, Met g ingeschakeld wordt elke match in de tekst vervangen, wat de meeste replace-all taken nodig hebben.
Hoe verwijder ik elke match in plaats van deze te vervangen? Laat het veld Vervangen leeg Met de globale vlag aan wordt elke overeenkomst uit de tekst verwijderd Dit is de schoonste manier om tags, witruimte-runs of ongewenste tekens die een patroon delen te strippen.
Wat betekenen de speciale tokens $&, backtick en apostrof bij de vervanging? $& voegt de volledige overeenkomende substring in, een backtick voegt de tekst in vóór de match, en een apostrof voegt de tekst er achter in Om een letterlijk dollarteken uit te voeren, schrijft u $$ Deze volgen de standaard JavaScript String.vervang speciale vervangingspatronen.
Welke regex smaak gebruikt deze tool? Het maakt gebruik van de JavaScript (ECMAScript) RegExp-engine die in uw browser is ingebouwd en die identiek is aan die in Node.js. De resultaten komen hier overeen met hoe hetzelfde patroon en dezelfde vervanging zich gedragen in JavaScript en TypeScript. JavaScript regex verschilt van PCRE, Python re en Java in sommige geavanceerde functies.
Waarom levert mijn vervanger een letterlijke $ 1 op in plaats van de vastgelegde tekst? Een letterlijke $1 in de uitvoer betekent meestal dat je patroon geen eerste vastleggroep heeft, dus er is niets voor $1 om naar te verwijzen Wikkel het deel dat je wilt hergebruiken tussen haakjes om de groep te maken, en tel groepen van links naar rechts vanaf 1.
Is het veilig om regex replace uit te voeren op gevoelige gegevens? Ja. alle matching en vervanging gebeurt in JavaScript in uw browser, dus er wordt geen patroon, vervanging of tekst naar een server verzonden, er wordt niets geregistreerd en de tool werkt met uitgeschakelde verbinding U kunt logbestanden, persoonlijke gegevens of eigen formaten veilig opnieuw formatteren.
Deze gids begeleidt de gratis Regex Vervang tool op Toolz.dev - geen aanmelding, geen uploads, werkt offline.



