[JS] Opera 7.00 & .replace

Pagina: 1
Acties:

  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Ik heb mijn opera geupgrade naar van 6.x naar 7.00 en nou krijg ik het volgende probleem bij het replace commando in javascript:

Eerst ff de code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<HTML>
<HEAD>
<SCRIPT Language="Javascript">
<!--
var fileName=new String('/DATABASE/DIRECTORY/DOCUMENT/$FILE/BESTANDSNAAM.DAT');
var src=new String('[img]"%VAR%"[/img]');
var dst=new String('');
dst=src.replace('%VAR%',fileName);
alert(dst);
//-->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>


Als je dit script in IE(6) start dan displayed er een IMG tag met daarin de script uit variable "fileName". Echter doe je dit in Opera7 dan verdwijnt de "$F".

Zover ik heb kunnen achterhalen heb je wel een $1 ... $9 waarmee je iets met woorden kunt doen als je een RegExp variable gebruikt. Maar in het geval van dit script heb ik toch duidelijk STRINGS gebruikt?? Of zie ik iets over het hoofd?

Enige oplossing die ik tot nu heb kunnen verzinnen is eerst het dollar teken te vervangen door "$" code...

[ Voor 11% gewijzigd door dumb_8 op 03-02-2003 11:26 ]

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • edie
  • Registratie: Februari 2002
  • Laatst online: 22:12
Die '$' escapen?

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Ja geen idee hoe het heet... Blijkbaar is dat verdwenen in mijn uitleg :P

Vervangen door & # 0 3 6 ; iig

[ Voor 19% gewijzigd door dumb_8 op 03-02-2003 11:57 ]

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24

Hangloozz

{ @$%&# }

idd replacen.
als ik dit gebruik en de geschreven string bekijk is het gewoon weer een $ :)
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
    <SCRIPT Language="Javascript">
<!--
var fileName=new String('/DATABASE/DIRECTORY/DOCUMENT/$FILE/BESTANDSNAAM.DAT');
var src=new String('[img]"%VAR%"[/img]');
var dst=new String('');
dst=src.replace('%VAR%',fileName);
//alert(dst);
document.write(dst);
//-->
</SCRIPT>

</head>

<body>


</body>
</html>

www.jurgroessen.nl


  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Ja maar ik was meer op zoek naar een verklaring cq oplossing ipv een workaround... Ik krijg namelijk sterk de indruk dat het gewoon een bug is in Opera 7.00 (ook omdat andere browsers, incl. de oudere opera daar geen last van hebben)....

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24

Hangloozz

{ @$%&# }

tis geen workaround, tis een url-encoding, dat wat je eigenlijk al had moeten doen ;)
Speciale karakters kun je zowiezo beter url-geëncode verwerken om te voorkomen dat ze deel uit gaan maken van je script/string..

www.jurgroessen.nl


  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Toch weer terug naar af; als ik opgeef dat het als string verwerkt moet worden mag ik toch ook verwachten dat het als string wordt verwerkt? Afgezien van het feit dat je speciale karakters beter kan encoderen? Vind een dollar teken nou ook niet echt "speciaal"...

Misschien wordt e.e.a. wel opgelost in de volgde release, ik hou het wel even met de gecodeerde dollar teken erin...

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24

Hangloozz

{ @$%&# }

*zucht* als ik in een webpagina een doodnormale broodtext neerkwak dan is dat toch ook een string? Ook dan is het beter om de zaak te url-encoden..net als het gebruik van een ampersand(&) in je URL-querystring (mind the word string ;) ) waarbij het eigenlijk ook verplicht is het op deze wijze toe te passen; &
Het bestaat niet voor niets weet je.


Maar niemand verbied je eigenwijs te zijn en lekker je $ door te duwen... ;)

www.jurgroessen.nl


  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Point taken. Ook opgelost als voorgesteld.

Tnx voor de reacties...

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • edie
  • Registratie: Februari 2002
  • Laatst online: 22:12
http://devedge.netscape.c...rence/string.html#1194258
$$ | Inserts a '$'
Je moet dus een $$ invullen in je regexp, anders wordt hij verkeerd geintreperteerd door de regexp. Opera 7.00 doet het dus goed :)

Zo dus:
code:
1
var fileName=new String('/DATABASE/DIRECTORY/DOCUMENT/$$FILE/BESTANDSNAAM.DAT');

Tenminste... zo lijkt het mij ;) (niet getest dus)

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Klopt... Opera doet het dan goed, maar IE6 weer niet... De encoderingsoptie is tot nu toe het beste alternatief...

Alleen je hebt het over RegExp, moet je deze niet definieren met "new RegExp" ipv "new String"?

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • edie
  • Registratie: Februari 2002
  • Laatst online: 22:12
dumb_8 schreef op 03 februari 2003 @ 13:25:Alleen je hebt het over RegExp, moet je deze niet definieren met "new RegExp" ipv "new String"?
regExp is een functie van het object String. Het is dus onmogelijk om een nieuw regExp object te maken, aangezien deze niet bestaat :)

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Maar..maar..maar.. In de netscape docs staat:

... knip....

RegExp

A regular expression object contains the pattern of a regular expression. It has properties and methods for using that regular expression to find and replace matches in strings.

In addition to the properties of an individual regular expression object that you create using the RegExp constructor function, the predefined RegExp object has static properties that are set whenever any regular expression is used.Core object

Implemented in
JavaScript 1.2, NES 3.0


JavaScript 1.3: added toSource method


Created by
A literal text format or the RegExp constructor function.

The literal format is used as follows:

/pattern/flags
The constructor function is used as follows:

new RegExp("pattern"[, "flags"])

... knip....

Ik geloof niet dat ik het nog helemaal volg... 8)7

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • edie
  • Registratie: Februari 2002
  • Laatst online: 22:12
Er zijn twee mogelijkheden om je replace uit te voeren...

1) String.replace( regexp, new substring), en
2) String.replace( strnig exp, new substring)

Bij 1 moet je PHP/Perl-like syntax gebruiken voor je regexp, bij 2 mag je gewoon tekst intikken.

Dus
code:
1
2
var een = new String( 'blaatschaap' );
een.replace( 'blaat', 'dood ' );

Hij doet dan een stringsearch en vervangt dus alles van 'blaat' door 'dood '.

Een regexp ziet er iets anders uit, nl:
code:
1
2
3
var een = new String( 'blaatschaap' );
var re = /blaat/;
een.replace( re, 'dood ' );

Resultaat is hetzelfde, alleen je expression is anders.

In de NS JS reference staat (en nu quote ik beter ;))
Specifying a string as a parameter. The replacement string can include the following special replacement patterns:

$$  | Inserts a '$'.
Als je dus een string als parameter meegeeft moet je $$ gebruiken, geef je een regexp mee dan hoeft dat niet.

(voor deze hele post geldt: imo dan)

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • dumb_8
  • Registratie: Juli 2001
  • Laatst online: 07-07 16:35
Oke, dus de 2e parameter is altijd een string, waardoor het ook altijd noodzakelijk is om iets speciaals te doen met de '$'. Je kunt volgens deze specs geen RegExp daarvoor gebruiken. Wel in de eerste parameter, maar daar ging het mijn in dit geval niet om.

Verder natuurlijk evenveel moeite om het om te zetten naar de url encoding als het dollarteken verdubbelen. Het complexe zat hem in het feit dat de waarde van de bestandsnaam uit een notes database komt...

Nou duidelijk lijkt me.

offtopic:
Wauw , jij quote idd beter :P

i386SX/16MHz, Trident 9400 1MB Vesa Local Bus, 4MB fpage, 40 MB hdd, Soundblaster 2.0


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

eddie19
RegExp is wel degelijk een object, en is geen methode of property van een String object. Hoe kan een regular expression anders een type zijn?

JavaScript:
1
2
3
4
var re = /^[^a]+$/;
alert ( re.test ( 'bevat geen a?' ) );
// of sterker nog:
alert ( /^[^c]+$/.test ( 'bevat geen a?' ) );

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • edie
  • Registratie: Februari 2002
  • Laatst online: 22:12
drm schreef op 03 February 2003 @ 14:44:
eddie19
RegExp is wel degelijk een object, en is geen methode of property van een String object. Hoe kan een regular expression anders een type zijn?

JavaScript:
1
2
3
4
var re = /^[^a]+$/;
alert ( re.test ( 'bevat geen a?' ) );
// of sterker nog:
alert ( /^[^c]+$/.test ( 'bevat geen a?' ) );
Ja, ik las het in de NS JS reference (devedge.netscape.com) :)

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert

Pagina: 1