replace mit javascript?
susi
- javascript
0 wahsaga0 susi0 wahsaga0 susi0 wahsaga-1 susi
hallo,
ich lade folgenden string in javascript:
[CODE]
<span id="description">#DESC#</span><spanclass="profile_name">#NAME#<span></br>
[/CODE]
dies ist so eine art template engine für JS nur zur erklärung ...
in JS hab ich nun folgenden code:
[CODE]
str+= template_tmp.replace(/\b#NAME#\b/, Data[i].value);
str+= template_tmp.replace(/\b#DESC#\b/, Data[i].description);
[/CODE]
nur ...
es wird nicht replaced?
wo liegt der fehler, leider bin ich nicht so der regEx checker, aber vielleicht jemand von hier?
bussi, susi
hi,
<span id="description">#DESC#</span><spanclass="profile_name">#NAME#<span></br>
str+= template_tmp.replace(/\b#NAME#\b/, Data[i].value);
Und du bist sicher, dass > und < als Wortgrenze gelten?
gruß,
wahsaga
str+= template_tmp.replace(/\b#NAME#\b/, Data[i].value);
Und du bist sicher, dass > und < als Wortgrenze gelten?
was?
\b sind die wortgrenzen!
warum sollten >< die wortgrenzen sein?
lg, susi
hi,
Und du bist sicher, dass > und < als Wortgrenze gelten?
was?
Oh man ... drücke ich mich so kompliziert aus - oder bist du so blond?
\b sind die wortgrenzen!
Ja genau, diese Zeichen in deinem Suchausdruck _verlangen_, dass sich vor und nach #xyz# eine Wortgrenze befinden _muss_.
warum sollten >< die wortgrenzen sein?
Weil diese Zeichen in deinem Text, den du durchsuchen willst, vor und hinter dem #yxz# stehen.
Also müssten > und < vom regulären Ausdruck als Wortgrenze erkannt werden, damit er auf deinen Text zutreffen kann.
Und deshalb die Frage, ob du das überprüft, oder irgendwo in der Spezifikation nachgeschlagen hast?
gruß,
wahsaga
das braucht "er" gar nicht prüfen!
#MARKER# soll ersetzt werden da ist ihm ja der urspungstext vollends egal ...
aber die lösung lautet, da ich sie shcon von jemand anderem bekommen habe!
str= template_tmp.replace(/#NAME#/gi, Data[i].value);
str= str.replace(/#DESC#/gi, Data[i].description);
dennoch danke ...
und net immer gleich so angefressen udn überheblich reagieren ...
ist nicht gut fürs herzal ...
bussi susi
hi,
das braucht "er" gar nicht prüfen!
Doch, das _musste_ "er", weil du es "ihm" so vorgeschrieben hast.
#MARKER# soll ersetzt werden da ist ihm ja der urspungstext vollends egal ...
Mädel, weißt du überhaupt, wo von du redest?
Du willst _im_ Ursprungstext etwas ersetzen - wie kann da der Urpsrungstext "egal" sein?
aber die lösung lautet, da ich sie shcon von jemand anderem bekommen habe!
str= template_tmp.replace(/#NAME#/gi, Data[i].value);
str= str.replace(/#DESC#/gi, Data[i].description);
Na also, jetzt hast du also die unsinnige Bedingung, dass sich vor und nach #NAME# und #DESC# jeweils eine Wortgrenze befinden _muss_ - noch mal: diese Bedingung hattest _du selber_ formuliert - ja auch weggelassen.
und net immer gleich so angefressen udn überheblich reagieren ...
Und das nächste mal vielleicht etwas mehr Ahnung besorgen, bevor du so etwas versuchst.
gruß,
wahsaga
wenn ich mehr ahnung hätte müsste hich hier posten?
und wenn ich gern was versuche dann mach ich dies auch ohne ahnung, du nicht?
darum gibt es dieses forum doch, damit nicht jeder die weisheit mit dem löffel zu sich nehmen muss bzw. dies auch nicht kann.
ich kann es nicht ... du?
und "_JA BURSCHI_" ich weiss auch bei meinem kompetenzbereich von was ich rede, bei diesem problem jedoch nicht!
also cool down und danke nochmals ...
lg, susi
Nur so zur Anmerkung. Wortgrenzen sind keine Zeichen. Demzufolge war susis Ansatz nicht falsch. Eher im Gegenteil. wahsaga lag mit seiner Vermutung, dass die Engine bei einer Wortgrenze auf die < und > anspringt, daneben.
hi,
Nur so zur Anmerkung. Wortgrenzen sind keine Zeichen.
Sondern?
Demzufolge war susis Ansatz nicht falsch.
Doch, war er.
Eher im Gegenteil.
Nein.
wahsaga lag mit seiner Vermutung, dass die Engine bei einer Wortgrenze auf die < und > anspringt, daneben.
Und du liegst daneben, wenn du meinst, ich hätte das gesagt.
_Weil_ > und < eben _keine_ Wortgrenzen sind, konnte der Ausdruck, der nach #NAME# genau zwischen zwei Wortgrenzen suchte, keinen Treffer finden. _Weil_ sich nämlich davor und dahinter eben _keine_ Wortgrenzen befanden, sondern die Zeichen > und <.
gruß,
wahsaga
Auch hi
hi,
Sondern?
Metazeichen würde ich jetzt mal sagen. Bin mir gerade über den genauen Begriff nicht sicher.
Doch, war er.
Nein, war er nicht. Zumindest nicht der regex-Teil
Und du liegst daneben, wenn du meinst, ich hätte das gesagt.
Dann habe ich das möglicherweise falsch verstanden.
_Weil_ > und < eben _keine_ Wortgrenzen sind, konnte der Ausdruck, der nach #NAME# genau zwischen zwei Wortgrenzen suchte, keinen Treffer finden. _Weil_ sich nämlich davor und dahinter eben _keine_ Wortgrenzen befanden, sondern die Zeichen > und <.
Und genau da liegt der Fehler. Die Wortgrenze liegt zwischen dem > und #, weil es eben eine Wortgrenze ist und kein Zeichen. Deswegen hätte die Regex-Engine einen Treffer gefunden. Dass die beiden Wortgrenzen überflüssig waren ist ein anderes Thema, aber falsch waren sie nicht.
Gruß Ben
Und gleich ne Revidierung von mir. wahsaga hat doch Recht, shame on me. Natürlich hätte die Wortgrenze nicht auf >#NAME gematched. Man sollte genauer denken, bevor man was schreibt. Nachdem > keines der Zeichen darstellt die zu einer Wortgrenze führen.
Aber \b stellt wirklich kein Zeichen dar, zumindest das war an meiner Aussage korrekt.
Also sorry wahsaga, bin schon wieder ruhig :)
Gruß Ben
Hallo yetanotheruser.
Aber \b stellt wirklich kein Zeichen dar, zumindest das war an meiner Aussage korrekt.
Nö. \b entspricht z. B. „ “ oder auch „\n“. Beides sind gültige und sogar sichtbare Zeichen.
Einen schönen Dienstag noch.
Gruß, Ashura
Hallo yetanotheruser.
Aber \b stellt wirklich kein Zeichen dar, zumindest das war an meiner Aussage korrekt.
Nö. \b entspricht z. B. „ “ oder auch „\n“. Beides sind gültige und sogar sichtbare Zeichen.
Also hier bleibe ich stur. \b entspricht weder " " noch "\n".
Zitat aus der Regex Definition von Perl:
A word boundary (\b ) is a spot between two characters that has a \w on one side of it and a \W on the other side of it (in either order), counting the imaginary characters off the beginning and end of the string as matching a \W .
Das gleiche nochmal aus Wikipedia:
\b steht für die leere Zeichenkette am Wortanfang oder am Wortende
Und noch ein Quote aus O'Reillys "Reguläre Ausdrücke - kurz und gut"
Wortgrenze: \b, \B, <, >
Metazeichen für Wortgrenzen erkennen eine Position, an der ein Wortzeichen neben einem Nicht-Wortzeichen steht. ...
Wenn \b " " oder "\n" matchen würde, dann wäre das ganze Konstrukt sinnlos. Aber es wird eben genau das Nicht-Wortzeichen NICHT gematched.
Einen schönen Dienstag noch.
Ebenfalls.
Gruß Ben
Hallo yetanotheruser.
Wenn \b " " oder "\n" matchen würde, dann wäre das ganze Konstrukt sinnlos. Aber es wird eben genau das Nicht-Wortzeichen NICHT gematched.
Welches unter anderem „ “ und „\n“ sein können. Dass „\b“ nicht auf „ “ bzw. „\n“ allein matcht, hat auch niemand behauptet.
Einen schönen Dienstag noch.
Gruß, Ashura
hi,
Wenn \b " " oder "\n" matchen würde, dann wäre das ganze Konstrukt sinnlos. Aber es wird eben genau das Nicht-Wortzeichen NICHT gematched.
Welches unter anderem „ “ und „\n“ sein können. Dass „\b“ nicht auf „ “ bzw. „\n“ allein matcht, hat auch niemand behauptet.
Nein, yetanotheruser hat schon Recht:
\b matcht auf ein imaginäres Konstrukt - eben wie beschrieben die Grenze zwischen nicht-Wort-Zeichen und Wort-Zeichen - aber es matcht kein greifbares "Zeichen".
\b matcht nicht "auf" das Leezeichen oder den Zeilenumbruch - sonst müsstest du sie ja auch _ersetzen_ können, in dem du nach \b suchst.
Einfaches Beispiel:
javascript:alert('blah blubb'.replace(/\b/g, '#'))
gibt #blah# #blubb# aus - an den Wortgrenzen wurde # hinzugefügt, das Leerzeichen zwischen den Worten wurde aber _nicht_ ersetzt, sondern es wurde an den Wortgrenzen davor und dahinter # hinzugefügt.
Wenn \b wirklich auch auf Space oder Zeilenumbruch matchen würde - dann käme sich das arme \s ja ziemlich überflüssig vor, und das kann ja niemand wollen.
gruß,
wahsaga
Hallo wahsaga.
\b matcht auf ein imaginäres Konstrukt - eben wie beschrieben die Grenze zwischen nicht-Wort-Zeichen und Wort-Zeichen - aber es matcht kein greifbares "Zeichen".
Das habe ich auch nicht gemeint. Ich wollte zum Ausdruck bringen, dass \b unter anderem ein Leerzeichen, ein Zeilenumbruch, ein Tab u. A. sein kann, also welche Zeichen als Word-Boundary angesehen werden.
Dass man \b nicht einfangen kann, wollte ich auch nicht in Frage stellen.
Einen schönen Mittwoch noch.
Gruß, Ashura
Hi,
\b matcht auf ein imaginäres Konstrukt - eben wie beschrieben die Grenze zwischen nicht-Wort-Zeichen und Wort-Zeichen - aber es matcht kein greifbares "Zeichen".
Das habe ich auch nicht gemeint. Ich wollte zum Ausdruck bringen, dass \b unter anderem ein Leerzeichen, ein Zeilenumbruch, ein Tab u. A. sein kann, also welche Zeichen als Word-Boundary angesehen werden.
_Kein_ Zeichen wird als Word-Boundary angesehen.
Eine Word-Boundary ist die _Position_ _zwischen_ _zwei_ _Zeichen_, von denen eines in \w und das andere in \W enthalten ist, bzw. die _Position_ vor einem Zeichen aus \w am Anfang bzw. die _Position_ nach einem Zeichen aus \w am Ende.
(Anfang bzw. Ende beziehen sich dabei - abhängig vom Modus - nur auf String-Anfang bzw. -String-Ende oder zusätzlich auch auf Zeilen-Anfänge bzw. Zeilen-Enden innerhalb des Strings)
cu,
Andreas
Hallo MudGuard.
_Kein_ Zeichen wird als Word-Boundary angesehen.
Und was steht normalerweise zwischen Wörtern? Kein Zeichen, also nichts?
Wenndemsowäresähedieshiersoaus.
Eine Word-Boundary ist die _Position_ _zwischen_ _zwei_ _Zeichen_, von denen eines in \w und das andere in \W enthalten ist, bzw. die _Position_ vor einem Zeichen aus \w am Anfang bzw. die _Position_ nach einem Zeichen aus \w am Ende.
Noch einmal: dies habe ich auch nie in Frage gestellt.
Einen schönen Mittwoch noch.
Gruß, Ashura
Hi,
Und was steht normalerweise zwischen Wörtern?
Das ist doch vollkommen irrelevant. Es geht ja nicht um das, was zwischen den Wörtern steht, sondern um word-boundaries, also die Grenzen eines Wortes.
Bei Regulären Ausdrücken geht es bei Word-Boundaries eben NICHT um Zeichen, sondern um Positionen zwischen Zeichen (bzw. nur um Positionen, falls es um Zeilen- bzw. String- -Anfang bzw. -Ende geht)
Noch einmal: dies habe ich auch nie in Frage gestellt.
Doch, hast Du: Ich zitiere:
Ich wollte zum Ausdruck bringen, dass \b unter anderem ein Leerzeichen, ein Zeilenumbruch, ein Tab u. A. sein kann, also welche Zeichen als Word-Boundary angesehen werden.
"dass \b unter anderem ein Leerzeichen, ein Zeilenumbruch, ein Tab u. A. sein kann"
oder auch
"welche Zeichen als Word-Boundary angesehen werden" ist vollkommen falsch im Zusammenhang mit regulären Ausdrücken, da ja eben nicht Zeichen, sondern eine Position zwischen Zeichen (bzw. nur um Positionen, s.o.) die word-boundary darstellen.
cu,
Andreas
Hallo MudGuard.
"welche Zeichen als Word-Boundary angesehen werden" ist vollkommen falsch im Zusammenhang mit regulären Ausdrücken, da ja eben nicht Zeichen, sondern eine Position zwischen Zeichen (bzw. nur um Positionen, s.o.) die word-boundary darstellen.
Ist gut, ich habe es verstanden.
Einen schönen Mittwoch noch.
Gruß, Ashura