webForumDet fria alternativet

Tips: Regexp vid ersättning av text

Webbutveckling

0 svar · 338 visningar · startad av nitro2k01

Medlem sedan aug. 20039 340 inlägg
Frågan#1

Reguljära uttryck är ett kraftfullt verktyg för texthantering och ersättning om du vet hur du ska använda det. Nedan följer ett exempel på hur ett uttryck med flera matchningar kan användas för effektiv ersättning. Exemplen är i javascript-smak, men kan lätt omvandlas till andra språk dialekter.

Denna funktion skapar en alternativ epost-adress utifrån vad användaren anger för adress och alternativsträng. Funktionen ska dock bara göra detta med gmail-adresser, då inte alla e-post-leverantörer har stöd för alternativa adresser.
Förklaring till skriptet:
String.prototype.createAltEmail=function(altstring) Denna kod skapar funktionen på ett sådant sätt att den kan anropas som en instansmetod på en sträng, t ex "testmail@gmail.com".createAltEmail("altalt") --> "testmail+altalt@gmail.com"
/([\w]+)(@g(oogle)?mail.com)/gi Detta är mönstret som ska matchas.

([\w]+) [\w] matchar all icke-blanka tecken, t ex bokstäver och siffror. + betyder att det som står angivet ska matchas en eller flera gånger. Parentesen i uttrycket förklaras senare.

(@g(oogle)?mail.com) Matchar antingen strängen @gmail.com eller @googlemail.com. (oogle)? innebär att oogle matchas noll eller en gånger. (Så att både @gmail.com och @googlemail.com men inte googleooglemail.com är giltiga matchningar) Parentesen i uttrycket förklaras senare.

gi Bokstäverna g och i efter ett uttryck förändrar uttryckets beteende. g anger att matchningen ska ske "girigt", vilket betyder att flera matchningar tillåts. i står case insensitive och anger att t ex mönstret abc ska matcha både abc, ABC och aBc. (Där de två sista inte hade matchats utan i.)

Det kraftfulla i med att använda RegExp för att ersätta text, mot vanlig sträng-replace, är att du kan dra nytta av undermatchningar. I ersättningstexten kan du lägga till uttryck som består av $ följt av ett nummer, för att plocka ut en matchning. $1 sätter in den första matchningen, $2 den andra osv. "$1+" + altstring + "$2" skapar en javascript-sträng som kan se ut t ex så här: "$1+altalt$2" I denna ersättningssträng kommer $1 att ersättas med den första matchningen, i detta fall en rad med icke-blanka tecken. Sedan sätts strängen +altalt in. Sist kommer matchning nr 2, @ följt av antingen gmail.com eller googlemail.com.

String.prototype.createAltEmail=function(altstring){
    return this.replace(/([\w]+)(@gmail.com|@googlemail.com)/g,"$1+" + altstring + "$2"));
}

Not: En alternativ e-post-adress är en adress som har ett + i sig och där allt mellan + och @ ignoreras. Detta är användbart för att förhindra spam, då all e-post till en adress kan blockeras, om just den alternativa adressen skulle läcka ut till spam-sändare.

252 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)