Sasja Posted February 7, 2005 Share Posted February 7, 2005 Om man använder regExp på ungefär detta sätt: strReplace = [GRÅ]"<font color="[/GRÅ][GRÅ]"red"[/GRÅ][GRÅ]">$1</font>"[/GRÅ] objRegExp.Pattern = [GRÅ]"\[red\]([^\[\]]*)\[/redl\]"[/GRÅ] str = objRegExp.[color="#0000ff"]Replace[/color](str, strReplace) Och vill samtidigt att överallt i den inmatade strängen str som är "inringat" med [red] och [/red] så ska bokstaven a ersättas med bokstaven b. Skulle alltså "vilja" ändra första raden till så här: strReplace = [GRÅ]"<font color="[/GRÅ][GRÅ]"red"[/GRÅ][GRÅ]">"[/GRÅ] & [color="#0000ff"]Replace[/color]($1, [GRÅ]"a"[/GRÅ], [GRÅ]"b"[/GRÅ]) & [GRÅ]"</font>"[/GRÅ] Vilket givetvis inte fungerar, visar det bara för att - förhoppningsvis - vara lite tydligare. Given poäng till den som löser mitt problem! [inlägget ändrat 2005-02-07 22:31:13 av Sasja] Link to comment Share on other sites More sharing options...
Sasja Posted February 8, 2005 Author Share Posted February 8, 2005 Ingen som kan hjälpa mig lösa mitt problem? Eller är det frågan som ingen förstår? Link to comment Share on other sites More sharing options...
Anjuna Moon Posted February 8, 2005 Share Posted February 8, 2005 Den här är lite omständig kanske, men jag såg ingen väg runt det: [color="#0000ff"]Function[/color] Sasjalize(strData) [color="#0000ff"]Set[/color] regEx = [color="#0000ff"]New[/color] RegExp regEx.IgnoreCase = [color="#0000ff"]True[/color] regEx.Global= [color="#0000ff"]True[/color] regEx.Pattern =[GRÅ]"(\[red\])([^\[]*)(\[/red\])"[/GRÅ] [color="#0000ff"]Set[/color] Matches = regEx.[color="#0000ff"]Execute[/color](strData) [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] Match [color="#0000ff"]In[/color] Matches regEx.Pattern =[GRÅ]"(\[red\])([^\[]*)(\[/red\])"[/GRÅ] sInner=[color="#0000ff"]Replace[/color](regEx.[color="#0000ff"]Replace[/color](Match.Value,[GRÅ]"$2"[/GRÅ]),[GRÅ]"a"[/GRÅ],[GRÅ]"b"[/GRÅ]) sRet=sRet & regEx.[color="#0000ff"]Replace[/color](Match.Value,[GRÅ]"$1"[/GRÅ] & sInner & [GRÅ]"$3"[/GRÅ]) [color="#0000ff"]Next[/color] Sasjalize=sRet [color="#0000ff"]End[/color] [color="#0000ff"]Function[/color] Link to comment Share on other sites More sharing options...
-OZn- Posted February 8, 2005 Share Posted February 8, 2005 Kanske jag som är trött men jag ser inte hur Anjuna´s funktion ska kunna göra det som efterfrågas. Som gardering så har du ytterligare en regexpvariant: [color="#0000ff"]Function[/color] Redmark(str) [color="#0000ff"]Set[/color] objReg = [color="#0000ff"]New[/color] regexp objReg.Global = [color="#0000ff"]True[/color] objReg.IgnoreCase = [color="#0000ff"]True[/color] objReg.Pattern=[GRÅ]"\[red\]([\w\W]*?)\[/red\]"[/GRÅ] iSIndex = 1 iEIndex = 1 [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] objMatch [color="#0000ff"]In[/color] objReg.[color="#0000ff"]Execute[/color](str) iEIndex = objMatch.FirstIndex sNew = sNew & [color="#0000ff"]Mid[/color](str, iSIndex, iEIndex-iSIndex+1) sNew = sNew & [color="#0000ff"]Replace[/color](objMatch.Value,[GRÅ]"a"[/GRÅ],[GRÅ]"b"[/GRÅ]) sNew = objReg.[color="#0000ff"]Replace[/color](sNew,[GRÅ]"<font color="[/GRÅ][GRÅ]"red"[/GRÅ][GRÅ]">$1</font>"[/GRÅ]) iSIndex = iEIndex+objMatch.Length+1 [color="#0000ff"]Next[/color] [color="#0000ff"]Set[/color] objReg = [color="#0000ff"]Nothing[/color] Redmark = sNew [color="#0000ff"]End[/color] [color="#0000ff"]Function[/color] Response.Write(Redmark("Kalle Karlsson [red]Kalle Karlsson[/red]")) /OZn _______________________________________________________ Microchips - De små potatisflingorna du äter allra sist i chipspåsen [inlägget ändrat 2005-02-08 17:31:32 av OZn] Link to comment Share on other sites More sharing options...
Anjuna Moon Posted February 8, 2005 Share Posted February 8, 2005 Kanske jag som är trött men jag ser inte hur Anjuna´s funktion ska kunna göra det som efterfrågas. Mitt förslag var lösning på hur jag tolkade första frågans problem: överallt i den inmatade strängen str som är "inringat" med [red] och [/red] så ska bokstaven a ersättas med bokstaven b. dvs. "test[red]abcaad[/red]testtest[red]abcd[/red]test" ska ge "test[red]bbcbbd[/red]testtest[red]bbcd[/red]test" Men jag kanske missförstod problemet? (Dock ser jag att funktionen inte är helt korrekt, men jag struntar i att ändra i den tills jag vet vad som egentligen efterfrågades) EDIT: Är också trött... [inlägget ändrat 2005-02-08 17:34:13 av Anjuna Moon] Link to comment Share on other sites More sharing options...
Sasja Posted February 8, 2005 Author Share Posted February 8, 2005 Ja, jag vill ändra min kodsnutt helt enkelt. Så här ser den ut nu: Input: abc-[red]abc[/red]-abc som då får outputen: abc-<font color="red">abc</font>-abc Men jag vill ha den så här: Input: (samma input som ovan) abc-[red]abc[/red]-abc som då ska få outputen: abc-<font color="red">bbc</font>-abc Det vill säga; Anjuna Moon förstod mig rätt som jag förstår det... =) *delar ut lite poäng så ni blir pigga* [inlägget ändrat 2005-02-08 18:03:03 av Sasja] [inlägget ändrat 2005-02-08 18:03:33 av Sasja] [inlägget ändrat 2005-02-08 18:05:09 av Sasja] Link to comment Share on other sites More sharing options...
Anjuna Moon Posted February 8, 2005 Share Posted February 8, 2005 En snabb följdfråga, kan input ha flera taggar? Ex. abc-[red]abc[/red]abc[red]abc[/red]-abc Link to comment Share on other sites More sharing options...
Sasja Posted February 8, 2005 Author Share Posted February 8, 2005 Ett snabbt svar: Ja Det kan min funktion göra nu... alltså ska den göra det även efter modifikationen. Vill helt enkelt bara fixa till funktionen ytterligare. Även om fallet jag gett är riktigt skumt... men fallet jag har är naturligtvis inte så som ni ser det utan något helt annat. Varför jag gjort så dumt exempel är bara för att det ska bli lättare för andra att sätta in sig hade jag tänkt. Kanske misslyckades jag. =) [inlägget ändrat 2005-02-08 18:10:27 av Sasja] Link to comment Share on other sites More sharing options...
-OZn- Posted February 8, 2005 Share Posted February 8, 2005 som då ska få outputen: abc-<font color="red">bbc</font>-abc Hehe, det är nog jag som är trött men är det inte det just vad min funktion gör? (missade en rad så jag postar koden igen) [log] [color="#0000ff"]Function[/color] Redmark(str) [color="#0000ff"]Set[/color] objReg = [color="#0000ff"]New[/color] regexp objReg.Global = [color="#0000ff"]True[/color] objReg.IgnoreCase = [color="#0000ff"]True[/color] objReg.Pattern=[GRÅ]"\[red\]([\w\W]*?)\[/red\]"[/GRÅ] iSIndex = 1 iEIndex = 1 [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] objMatch [color="#0000ff"]In[/color] objReg.[color="#0000ff"]Execute[/color](str) iEIndex = objMatch.FirstIndex sNew = sNew & [color="#0000ff"]Mid[/color](str, iSIndex, iEIndex-iSIndex+1) sNew = sNew & [color="#0000ff"]Replace[/color](objMatch.Value,[GRÅ]"a"[/GRÅ],[GRÅ]"b"[/GRÅ]) sNew = objReg.[color="#0000ff"]Replace[/color](sNew,[GRÅ]"<font color="[/GRÅ][GRÅ]"red"[/GRÅ][GRÅ]">$1</font>"[/GRÅ]) iSIndex = iEIndex+objMatch.Length+1 [color="#0000ff"]Next[/color] sNew = sNew & [color="#0000ff"]Mid[/color](str, iSIndex) [color="#0000ff"]Set[/color] objReg = [color="#0000ff"]Nothing[/color] Redmark = sNew [color="#0000ff"]End[/color] [color="#0000ff"]Function[/color] [/log] Response.Write(Redmark("abc-[red]abc[/red]-abc")) ger källkoden abc-<font color="red">bbc</font>-abc EDIT: Går och lägger mig nu /OZn _______________________________________________________ Microchips - De små potatisflingorna du äter allra sist i chipspåsen [inlägget ändrat 2005-02-08 18:16:50 av OZn] Link to comment Share on other sites More sharing options...
Anjuna Moon Posted February 8, 2005 Share Posted February 8, 2005 Min funktion nu tillåter även valfri färgtagg: [log] [color="#0000ff"]Function[/color] Colorize(strData) [color="#0000ff"]Set[/color] regEx = [color="#0000ff"]New[/color] RegExp regEx.IgnoreCase = [color="#0000ff"]True[/color] regEx.Global= [color="#0000ff"]True[/color] regEx.Pattern =[GRÅ]"([^\[]*)\[([^\]]+)\]([^\[]*)\[/[^\]]+\]([^\[]*)"[/GRÅ] [color="#0000ff"]Set[/color] Matches = regEx.[color="#0000ff"]Execute[/color](strData) [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] Match [color="#0000ff"]In[/color] Matches sInner=[color="#0000ff"]Replace[/color](regEx.[color="#0000ff"]Replace[/color](Match.Value,[GRÅ]"$3"[/GRÅ]),[GRÅ]"a"[/GRÅ],[GRÅ]"b"[/GRÅ]) sRet=sRet & regEx.[color="#0000ff"]Replace[/color](Match.Value,[GRÅ]"$1<font color="[/GRÅ][GRÅ]"$2"[/GRÅ][GRÅ]">"[/GRÅ] & sInner & [GRÅ]"</font>$4"[/GRÅ]) [color="#0000ff"]Next[/color] Colorize=sRet [color="#0000ff"]End[/color] [color="#0000ff"]Function[/color] [color="#006400"]' -------------------------------[/color] [b]Response[/b].write Colorize([GRÅ]"A[red]a[/red]B--C[blue]a[/blue]D--"[/GRÅ]) [/log] [inlägget ändrat 2005-02-08 18:22:01 av Anjuna Moon] Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.