Toon posts:

[JS] Replace van enkele backslash

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het veranderen van een paar HTT files, dit gaat allemaal prima. Echter loop ik tegen een simpel probleem aan, de HTT files krijgen waardes binnen met enkele slashes.

Ik wil de waarde %THISDIRPATH% splitten op een backslash, echter kan hij het niet exploden omdat het een escape teken is. Ik dacht dus laat ik die backslash eens vervangen door een dubbele backslash (zie script 1), dan werkt het script perfect.

Echter het leuke is dat %THISDIRPATH% een enkele slash bevat, nou dacht ik dat op te lossen door de methode uit script 2 te gebruiiken (dit kwam ik overal tegen op internet, en opzich had ik zoiets ook wel verwacht).

script 1:
code:
1
2
var dir = 'C:\\some\\stupid\\path\\to\\an\\file';
alert(dir.split('\\'));


script 2:
code:
1
2
3
var dir = 'C:\some\stupid\path\to\an\file';
var new = dir.replace(/\\/g,'\\\\');
alert (new);

[edit]
de var DIR in de 2 scripts moet je zien als %THISDIRPATH%, in het 2e script staat wat %THISDIRPATH% wordt na de replace door Windows.
[/end edit]

Script 2 lijkt me het logischte om te doen met een regex (open regex, 2x backslash is single slash in JS, sluiten regex, global), ook heb ik dit op een aantal andere websites teruggevonden.
JSInc
backslash backslashes (must be done first, so that we do not affect our own backslashes later): replace(/\\/g, '\\\\'). Since the backslash itself is always backslashed, when we replace one \ with two \\, we actually type code that includes two \\ and four \\\\.
regular-expressions.info
The regular expression \\ matches a single backslash. In JavaScript, this becomes re = /\\/
The Code Project
code:
1
2
3
    // attach initialisation code to it
    // .replace(/\\/g, "\\\\") replaces simple backslashes with 
    // double-backslashes
Ook heb ik nog wat informatie van deze website, daar staat veel uitleg over JavaScript RegEx (net als op de bovengenoemde websites).

Hoe kan ik er voor zorgen dat ik de waarde %THISDIRPATH% kan laten exploden(php)/splitten(js) naar een array? Ik dacht dat dit wel moest werken, maar dat doet het gewoonweg niet (zowel met IE6 als FF).

[ Voor 8% gewijzigd door Verwijderd op 22-09-2004 21:16 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

script 1 is gewoon goed hoor; doe eerst maar eens een alert(dir) ;)

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 22 september 2004 @ 20:39:
script 1 is gewoon goed hoor; doe eerst maar eens een alert(dir) ;)
Het probleem is dus dat %THISDIRPATH% geen dubbele slashes gebruikt, en kan ik dus Script 1 niet gebruiken.

Eigenlijk moet je dus even het script zo zien dat de var "dir" gevuld is met enkele slashes zoals in voorbeeld 2. Die wil ik ook exploden maar dat gaat niet omdat het een escape teken is.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

Verwijderd schreef op 22 september 2004 @ 20:53:
[...]

Het probleem is dus dat %THISDIRPATH% geen dubbele slashes gebruikt, en kan ik dus Script 1 niet gebruiken.

Eigenlijk moet je dus even het script zo zien dat de var "dir" gevuld is met enkele slashes zoals in voorbeeld 2. Die wil ik ook exploden maar dat gaat niet omdat het een escape teken is.
Er staan in script 1 geen dubbele slashes in de string, enkel escapede enkele slashes...

Intentionally left blank


Verwijderd

Alert die variabele nou eens naar het scherm.

JavaScript:
1
var dir = 'C:\\some\\stupid\\path\\to\\an\\file';
Die string bevat helemaal geen dubbele backslashes. Het is een manier om uberhaupt een backslash in een string te krijgen aangezien het een escape character is.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

inderdaad; als je dit doet:
JavaScript:
1
var dir = 'C:\some\stupid\path\to\an\file';

dan stop je o.a. een tab en een formfeed in je variabele...

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 22 september 2004 @ 20:57:
inderdaad; als je dit doet:
JavaScript:
1
var dir = 'C:\some\stupid\path\to\an\file';

dan stop je o.a. een tab en een formfeed in je variabele...
Het probleem is dat ik de waarde %THISDIRPATH% niet kan veranderen, dat is iets wat ingebouwd zit in windows HTT files (zelfgemaakte folderopmaak). Die waarde geeft Windows dus door aan de HTT file (dmv een replace).

Ik heb nou de bovenliggende mapnaam nodig voor het verwerken in mijn systeem, maar dan moet ik hebm wel kunnen exploden (wat dus niet gaat wegens de redenen die ik quote).

Verwijderd

Ik denk niet dat je hiermee nog verder geholpen kan worden, aangezien je weigert te begrijpen wat we tegen je zeggen.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

aha, dus jij doet dit in je HTT zeg maar:
JavaScript:
1
var dir = '%THISDIRPATH%';

?

Intentionally left blank


Verwijderd

Topicstarter
Verwijderd schreef op 22 september 2004 @ 21:13:
Ik denk niet dat je hiermee nog verder geholpen kan worden, aangezien je weigert te begrijpen wat we tegen je zeggen.
Ik ben bang dat er wat miscommunicatie rondvliegt ;)
crisp schreef op 22 september 2004 @ 21:14:
aha, dus jij doet dit in je HTT zeg maar:
JavaScript:
1
var dir = '%THISDIRPATH%';

?
Ja dit klopt, omdat %THISDIRPATH% die waarde bevat probeer ik een manier te maken dat ik hem kan exploden zonder iedere keer mn htt file aan te hoeven passen. Daarom staat hij dus direct in JS ingevuld (dat zal ook gebeuren als Windows de %THISDIRPATH% vervangen heeft, dus ik moet daarop iets maken).

[ Voor 4% gewijzigd door Verwijderd op 22-09-2004 21:19 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

De oplossing is dan om 'm niet direct in een variabele te stoppen, maar ergens in een HTML-element of een attribuut en die dan uit te lezen.

[ Voor 41% gewijzigd door crisp op 22-09-2004 21:23 ]

Intentionally left blank


Verwijderd

Topicstarter
In watvoor html-element kan ik dat het beste opslaan? Ik kan bv een hidden form gebruiken, maar is dat wel een goed idee / netjes?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

Verwijderd schreef op 22 september 2004 @ 21:27:
In watvoor html-element kan ik dat het beste opslaan? Ik kan bv een hidden form gebruiken, maar is dat wel een goed idee / netjes?
Mwa, een hidden input met een id waar je met getElementById('inputje').value de waarde uittrekt is al voldoende denk ik, of een gewoon hidden element waar je de innerText van uitleest (het is immers toch IE-only ;) ):
code:
1
2
3
4
5
<div id="path" style="display:none">C:\some\stupid\path\to\an\file</div>
<script type="text/javascript">
    var dir = document.getElementById('path').innerText.split('\\');
    alert(dir);
</script>

Intentionally left blank


Verwijderd

Topicstarter
Ik was bezig met mijn post te editen om te vermelden dat ik een oplossing gevonden heb.
code:
1
2
3
4
5
6
7
8
<form name="dirform">
  <input type="hidden" name="val" value="%THISDIRPATH%">
</form>
<script language="JavaScript">
  var dir = dirform.val.value;
  var dir = dir.split('\\');
  alert(dir);
</script>


Al moet ik toegeven dat jou code mooier is :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

als je een hidden input gebruikt hoeft daar geen form omheen hoor:
code:
1
2
3
4
5
<input type="hidden" id="val" value="%THISDIRPATH%" />
<script language="JavaScript">
  var dir = document.getElementById('val').value.split('\\');
  alert(dir);
</script>

Intentionally left blank

Pagina: 1