Flashhilfe.de - Flash Community

Javascript: replace auf String "mehrfach" anwenden

 


AntwortenRegistrieren Seite1  

Sebastian#1
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

03.06.2010, 15:53

Ich ärgere mich gerade mit JavaScript rum und verstehe einfach nicht warum mein String nicht komplett ersetzt wird.

Aus dem:
ActionScript:
1<span style="color: #ff9900;"><span style="color: #33cc00;">Text</span></span>

Soll das werden:
ActionScript:
1[farbe=#ff9900][farbe=#33cc00]Text[/farbe][/farbe]


Leider erhalte ich als Ergebnis immer nur:
ActionScript:
1[farbe=#ff9900]<span style="color: #33cc00;">Text[/farbe]</span>


Dabei habe ich g als Parameter angeben:
ActionScript:
1s = s.replace(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[farbe=$1]$2[/farbe]");

Hat jemand eine Idee wieso das nicht funktioniert?

...wenn ich den replace zwei mal hintereinander aufrufe funktioniert es übrigens.
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
jomac#2
Benutzerbild von jomac
Beiträge: 89
Wohnort: CH
Registriert: Jun 2010

03.06.2010, 20:47

Das ist etwas komplizierter als du zu denken scheinst.
Um das korrekt zu machen müsstest du eine Callback-Funktion benutzen und die anzahl geöffneter Element sowie die Anzahl geschlossener Elemente Zählen, sodass du immer erst die inneren zusammen schliesst und danach die äusseren.
Die RegExp macht genau das, was sie sollte, nämlich sie sucht nach dem ersten span-Element, dann so wenige Zeichen wie möglich .*? bis zum Abschluss des Span Element, dann ersetzt sie den gefundenen String:
ActionScript:
1<span style="color: #ff9900;"><span style="color: #33cc00;">Text</span>
Wobei <span style="color: #ff9900;"> == <span style=\"color: ?(.*?);\">
(.*?) == <span style="color: #33cc00;">Text
und </span> == </span>

Das letzte </span> wird beim ersten ersetzen nicht einbezogen. Danach sucht es wegen deinem greedy flag weiter findet jedoch nur noch </span>. Bei einem weiteren Anwenden von .replace ersetzt du den start-Tag des 2. span Elements und den End-Tag des 1.
Sebastian#3
Benutzerbild von SebastianFlashhilfe.de Moderator
Beiträge: 6981
Wohnort: München
Registriert: Jan 2002

Themenautor/in

03.06.2010, 21:11

Danke. Das war ein guter Tipp.

Ich habe es nun so gelöst:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
function rep(str, regEx, replaceStr)
{
   if(regEx.test(str))
   {
      str = str.replace(regEx, replaceStr);
      return rep(str, regEx, replaceStr);
   }
   
   return str;
}

alert(rep(s, /<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi, "[farbe=$1]$2[/farbe]"));
JavaScript & JavaFX Freelancer || Flashhilfe @ Twitter || XING Profil
Geändert von Sebastian am 03.06.10 um 23:39 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Javascript new line [Flash CS5] 23.11.2020 - user01234
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de