zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden RegEx Problem

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 08.03.2014, 16:36
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 04.04.2012
Beiträge: 31
CrunkJuice befindet sich auf einem aufstrebenden Ast
Standard RegEx Problem

Hallo Community,

ich habe ein Problem beim ersetzen von bestimmten Wörtern.

Ich iteriere ein JS-Objekt in folgender Form:

Code:
var smileys = {
  bored: '\\._\\.|:\\|',
  sunglasses: '(?:B|8)\\)',
  ...
}
Die Replace-Funktion sieht wie folgt aus:

Code:
message = message.replace(new RegExp('(^|\\s)(' + smileys[name] + ')(\\s|$)', 'g'), '$1<span class="smiley inner ' + name + '">$2</span>$3');
Mein Ziel ist es, dass Smileys, die entweder am Anfang der Nachricht, oder aber zwischen Leerzeichen (Der erste Block -> (^|\\s); Das gleiche auch am Ende) mit einem span-Element ersetzt werden.

Funktioniert auch, wenn man verschiedene Smileys hintereinander schreibt.
Z.B. ._.[LEERZEICHEN]B)

Wenn man nun aber den gleichen 2 mal hintereinander schreibt, also z.B. ._.[LEERZEICHEN]._., funktioniert es nicht.

Nun frage ich mich also: 'Wieso ?'.
Das Einzige, was mir in den Sinn kam war, dass das hintere Leerzeichen beim ersten Smiley auch nur bei dem ersten Smiley gematcht wird und beim zweiten sozusagen nicht existiert, da es schon gematcht wurde.

Surprise. Richtig vermutet.

Danach habe ich die Hintere Klammer (\\s|$) und das $3 im RegEx entfernt.
Nun matcht aber auch B)B) und wird zu [SMILEY]B).
Unschön.

Meine Frage an euch: Wie würdet ihr es machen, dass auch aufeinander folgende Smileys korrekt gematcht werden ?

Meine Ideen wären:

1. Das globale-Flag 'g' rausnehmen und den replace in einer while-Schleife ausführen lassen ? Würde mir nicht wirklich zusagen, obwohl es funktionieren sollte, ist aber sehr hässlich.

2. Anstatt dem String mit den Dollarzeichen eine Funktion verwenden, die aufgrund der Property 'index', des JS-Objekts, dass die replace-Funktion zurückgibt prüft, ob das nächste Zeichen existiert oder ein Leerzeichen ist ?

Irgendwie sind die ganzen Lösungsansätze die mir einfallen ziemlich unschön, ich hoffe euch fällt was besseres ein.

Mit freundlichen Grüßen
CrunkJuice
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 16.03.2014, 18:21
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 04.04.2012
Beiträge: 31
CrunkJuice befindet sich auf einem aufstrebenden Ast
Standard

Keiner ne Idee ? :/
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 17.03.2014, 20:11
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 04.04.2012
Beiträge: 31
CrunkJuice befindet sich auf einem aufstrebenden Ast
Standard

Naja .. ich habs jetzt so gelöst
Code:
for (var name in smileys)
{
  while (!!message.match(new RegExp('(^|\\s)(' + smileys[name] + ')(\\s|$)')))
    message = message.replace(new RegExp('(^|\\s)(' + smileys[name] + ')(\\s|$)'), '$1<span class="smiley inner ' + name + '">$2</span>$3');
}
Edit: Kann zu hier
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Design zu CSS/HTML verarbeiten - Problem häufen sich. Grafikamateur CSS 2 06.08.2007 09:57
Regex Problem ("]" killt die regex) psycho_dmr Serveradministration und serverseitige Scripte 7 29.04.2007 16:49
Problem mit WordPress und dem Bilder Upload Maxefix Serveradministration und serverseitige Scripte 0 19.12.2006 14:58
Problem bei Div's - zwei mal das gleiche und doch nicht ... Niriel CSS 10 09.06.2005 17:39
Problem mit einem CSS Layout nARC CSS 20 21.05.2005 06:28


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:58 Uhr.