webForumDet fria alternativet

Bugg i RegExp (?)

3 svar · 215 visningar · startad av toha

tohaMedlem sedan dec. 1999707 inlägg
#1

Skulle svara på "Hammers" inlägg om Replace och gjorde en funktion som använder sig av RegExp-objektet. Jag tror jag hittade en bugg i det.

Om jag har strängen:

Leffa (Fredag, Tisdag) Arne Svante (Onsdag)

och vill ta bort allt inom parateserna så skall mitt reguljära uttryck se ut som följer:

\(.*\)

Vilket matchar allt inom paranteser, inklusive parateserna. Men det uttrycket är greedy vilket betyder att om man tar bort allt som den matchar så får man kvar:

Leffa

För att göra det till ett s.k. non-greedy så skall uttrycket se ut så här:

\(.*?\)

Allt enligt MSDN Library:

By placing the '?' after a '*', '+', or '?' quantifier, the expression is transformed from a greedy to a non-greedy, or minimal, match.

Källa: MSDN Library, Oct 2000.

Vilket resulterar i följande felmeddelande:

Microsoft VBScript runtime (0x800A139A)
Unexpected quantifier

Lite putt blir man ju...

------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige

[Redigerat av toha den 06 feb 2001]

emissionMedlem sedan dec. 19996 721 inlägg
#2

Uppgradera till senaste versionen av VBScript, så ska det nog funka.

Annars kan du gå runt genom

\([^\)]*\)

som matchar på allt utom ) tills att den helt enkelt är tvungen att matcha.

[Redigerat av emission den 06 feb 2001]

tohaMedlem sedan dec. 1999707 inlägg
#3

Det uttrycket var ju smart. Jag tackar och bugar. :)

------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige

emissionMedlem sedan dec. 19996 721 inlägg
#4

Du är välkommen! :)

122 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)