[Coldfusion] JS comments verwijderen

Pagina: 1
Acties:

  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
Situatie:
Code wordt gegenereerd, bestaande uit CSS, Javascript en HTML. Dit alles komt in één file te staan, dus zonder includes van CSS of Javascript. Alles wordt dus in de pagina gezet. Dit gebeurt middels Coldfusion.

Deze code wordt in één variabele "gevangen" zodat hier Coldfusion functies op losgelaten kunnen worden.

Doel:
Wat ik wil doen is al het Javascript commentaar verwijderen wat met "//" begint. Heb er al diverse uren aan besteed maar tot dusver zonder succes. Soms worden alleen de slashes weggehaald, soms hele regels met code en soms verdwijnt zelfs de helft van de pagina.

Alle Javascripts met de hand doorlopen is ook geen optie, aangezien het om aardig wat code gaat (het gaat om een applicatie die clientside voor 95% op Javascript draait).

Het uiteindelijke doel is om alle code op één regel te krijgen. Dit lukt ook wel, alleen die comments van Javascript zitten nog dwars en krijg ze maar niet weg.

Wat heb ik nu:
Hieronder staan een paar dingen die ik geprobeerd heb.
code:
1
<cfset output = rereplacenocase(output, " //([^\n].*)", "", "ALL")>

code:
1
<cfset output = rereplacenocase(output, "(?m)^//([^\n].*)$", "", "ALL")>

code:
1
<cfset output = rereplacenocase(output, "(?m)^//([:alnum:]|[:blank:]|[:punct:])*$", "", "ALL")>

code:
1
<cfset output = rereplacenocase(output, " //[[:graph:][:blank:][^\n]]*", "", "ALL")>


Ook combinaties van bovenstaande regex' heb ik geprobeerd, of hier en daar een beetje schuiven met de parameters. Maar niks lijkt te werken. :N

Ook heb ik uiteraard al gegoogled, gezocht in de documentatie van Coldfusion (omdat Coldfusion nogal een handje heeft om dingen op een eigen manier op te lossen, de IBM onder de scriptinglanguages zeg maar :/ ) en met die resultaten geknutseld. Maar je raadt het al: nul komma nul resultaat.


Is er hier een meesterbrein aanwezig die mij uit de brand kan helpen? B)

[ Voor 8% gewijzigd door JaFFoG op 13-03-2007 10:32 . Reden: Wat heb ik nog meer gedaan? ;) ]

Bla


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Jij weet niet wat een punt ( . ) betekent in regexps geloof ik. Zoek de verschillen:
Jouw versie:
code:
1
<cfset output = rereplacenocase(output, " //([^\n].*)", "", "ALL")>

Beter:
code:
1
<cfset output = rereplacenocase(output, " //([^\n]*)", "", "ALL")>

Mijn versie:
code:
1
<cfset output = rereplacenocase(output, " //(.*)", "", "ALL")>

Die laatste moet al veel beter werken. ;)

edit:
In PCRE is [^\n] equivalent aan een . (punt). :P

[ Voor 20% gewijzigd door NMe op 13-03-2007 10:39 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:26

TeeDee

CQB 241

Volgens The Regulator is dit
code:
1
^(//.*)$
een prima werkende RegEx.
JavaScript:
1
2
3
4
function js{
var bla
//dit is een comment
}

Geeft als match: //dit is een comment

Heart..pumps blood.Has nothing to do with emotion! Bored


  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
-NMe- schreef op dinsdag 13 maart 2007 @ 10:34:
Jij weet niet wat een punt ( . ) betekent in regexps geloof ik. Zoek de verschillen:
[...]
Die laatste moet al veel beter werken. ;)

edit:
In PCRE is [^\n] equivalent aan een . (punt). :P
Helaas, geeft geen resultaat. :?
TeeDee schreef op dinsdag 13 maart 2007 @ 10:36:
Volgens The Regulator is dit
code:
1
^(//.*)$
een prima werkende RegEx.
JavaScript:
1
2
3
4
function js{
var bla
//dit is een comment
}

Geeft als match: //dit is een comment
Helaas, ook niks. Ik heb 'm nog even geprobeerd op de "regel-voor-regel" modus zeg maar, met (?m) ervoor, dus zo:
code:
1
"(?m)^(//.*)$"

Maar niks dus... :?

Wel super bedankt voor de snelle reacties. Ik knutsel ondertussen vrolijk verder. :)

Bla


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
JaFFoG schreef op dinsdag 13 maart 2007 @ 10:42:
Helaas, ook niks. Ik heb 'm nog even geprobeerd op de "regel-voor-regel" modus zeg maar, met (?m) ervoor, dus zo:
code:
1
"(?m)^(//.*)$"

Maar niks dus... :?

Wel super bedankt voor de snelle reacties. Ik knutsel ondertussen vrolijk verder. :)
Als je het dakje ( ^ ) weghaalt? dat heeft verder geen nut... daarbij wil je neem ik aan ook commentaar verwijderen dat bijv. achter een variable declaratie staat (zoals: var i = 0; // initialise i)
bovendien werkt de code op jouw manier ook niet als het commentaar bijvoorbeeld ingesprongen is met een aantal spaties of tabs...

  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
Edwardvb schreef op dinsdag 13 maart 2007 @ 10:53:
[...]

Als je het dakje ( ^ ) weghaalt? dat heeft verder geen nut... daarbij wil je neem ik aan ook commentaar verwijderen dat bijv. achter een variable declaratie staat (zoals: var i = 0; // initialise i)
bovendien werkt de code op jouw manier ook niet als het commentaar bijvoorbeeld ingesprongen is met een aantal spaties of tabs...
Dat klopt, ik wil ook comments weghalen die niet aan het begin van de regel staan. Het probleem is alleen wel dat, wanneer je het dakje weghaalt, je ook volledige URL's of links (die in de code dus met "http://" of soortgelijks beginnen) om zeep helpt.

Maar daar is wel weer een uitzondering voor te maken. Ik knutsel nog ff verder.

[ Voor 3% gewijzigd door JaFFoG op 13-03-2007 10:58 ]

Bla


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
JaFFoG schreef op dinsdag 13 maart 2007 @ 10:58:
[...]

Dat klopt, ik wil ook comments weghalen die niet aan het begin van de regel staan. Het probleem is alleen wel dat, wanneer je het dakje weghaalt, je ook volledige URL's of links (die in de code dus met "http://" of soortgelijks beginnen) om zeep helpt.

Maar daar is wel weer een uitzondering voor te maken. Ik knutsel nog ff verder.
oei, daar had ik ff niet aan gedacht inderdaad...

zoiets dan:

code:
1
"(?m)([^:]//.*)$"


dan heb je alleen opde eerste regel eventueel een probleem... omdat er dan geen teken voor // staat...

of zie ik weer wat over het hoofd?

[ Voor 16% gewijzigd door P.O. Box op 13-03-2007 11:09 ]


  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
Edwardvb schreef op dinsdag 13 maart 2007 @ 11:06:
[...]


oei, daar had ik ff niet aan gedacht inderdaad...

zoiets dan:

code:
1
"(?m)([^:]//.*)$"


dan heb je alleen opde eerste regel eventueel een probleem... omdat er dan geen teken voor // staat...

of zie ik weer wat over het hoofd?
Hij werkt überhaupt niet... Ik krijg zo langzamerhand het idee dat het aan Coldfusion ligt met z'n rare fratsen... :P

* JaFFoG is persoonlijk meer een PHP-er. :)

[ Voor 6% gewijzigd door JaFFoG op 13-03-2007 11:14 ]

Bla


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
JaFFoG schreef op dinsdag 13 maart 2007 @ 11:13:
[...]

Hij werkt überhaupt niet... Ik krijg zo langzamerhand het idee dat het aan Coldfusion ligt met z'n rare fratsen... :P

* JaFFoG is persoonlijk meer een PHP-er. :)
heb je hem ook al getest op een wat kleiner file waar zoals bijvoorbeeld TeeDee hierboven een voorbeeld van heeft?
wat bedoel je met werkt uberhaupt niet? dat hij niets vervangt, of dat hij compleet verkeerd vervangt?

* dit heeft natuurlijk niet zoveel met ColdFusion of PHP of whatever te maken... regular expressions staan meer op zichzelf wat dat betreft...

Ik ben zelf ook meer van het PHP-en... maar heb nog wel een ColdFusion certificaat ivm vorige baan ;)

[ Voor 20% gewijzigd door P.O. Box op 13-03-2007 11:29 ]


  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
Edwardvb schreef op dinsdag 13 maart 2007 @ 11:28:
[...]


heb je hem ook al getest op een wat kleiner file waar zoals bijvoorbeeld TeeDee hierboven een voorbeeld van heeft?
wat bedoel je met werkt uberhaupt niet? dat hij niets vervangt, of dat hij compleet verkeerd vervangt?
Sorry. Daarmee bedoel ik dat hij verkeerd vervangt, en ná knutselen op die regex niéts of nóg verkeerder. :P Nog altijd hetzelfde resultaat als wat ik al had dus.
* dit heeft natuurlijk niet zoveel met ColdFusion of PHP of whatever te maken... regular expressions staan meer op zichzelf wat dat betreft...
Dat regex' meer op zichzelf staan zou je verwachten, maar toch ben ik in Coldfusion al vreemde dingen tegengekomen. Backreferences die anders werken bijvoorbeeld.

Coldfusion heeft hier überhaupt wel een handje van (eigen regeltjes verzinnen). Het waarschijnlijk meest bekende voorbeeld is array's die in CF bij 1 beginnen in plaats van bij 0. I mean, what's that all about?
Ik ben zelf ook meer van het PHP-en... maar heb nog wel een ColdFusion certificaat ivm vorige baan ;)
Cool. Kennis is macht. _/-\o_ Nu de regex nog werkend krijgen. :P

Bla


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik heb (?m) trouwens nog nooit gebruikt... kent CF dat wel?

verder zijn eigenlijk de haakjes ook niet echt nodig...
dus misschien zoiets:
code:
1
"(?m)[^:]//.*$"


je zegt trouwens eerder dat je alles in 1 regel wil hebben... ik neem aan dat je pas alles in 1 regel zet NA dat je de regex hebt uitgevoerd?

  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
Edwardvb schreef op dinsdag 13 maart 2007 @ 12:12:
ik heb (?m) trouwens nog nooit gebruikt... kent CF dat wel?
Ja. Sterker nog: dat komt uit de CF documentatie van Adobe.
verder zijn eigenlijk de haakjes ook niet echt nodig...
dus misschien zoiets:
code:
1
"(?m)[^:]//.*$"
Dat heb ik ook geprobeerd. Met haakjes, zonder haakjes, vogelen met ^ en $, noem het allemaal maar op. Maar je raadt het al. :N
je zegt trouwens eerder dat je alles in 1 regel wil hebben... ik neem aan dat je pas alles in 1 regel zet NA dat je de regex hebt uitgevoerd?
Dat mag voor zich spreken. Het eerste wat ik loslaat op deze bende is de regex die ik nu probeer te maken. Daarna wordt nog commentaar verwijderd tussen /* en */ en pas daarna, als allerlaatste stap, wordt alles op één regel gezet. ;)

Bla


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik heb geen coldfusion server meer ter beschikking, anders had ik het even geprobeerd na te doen allemaal... maar helaas...

kun je niet regel voor regel loopen en dan de regex uitvoeren zonder (?m) ??? (niet echt de mooiste manier, maar je moet wat he)

  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
Edwardvb schreef op dinsdag 13 maart 2007 @ 13:02:
[...]
kun je niet regel voor regel loopen en dan de regex uitvoeren zonder (?m) ??? (niet echt de mooiste manier, maar je moet wat he)
Ja zoiets heb ik ook nog gedaan. Dat werkt makkelijker, maar wat je zegt: erg mooi is het niet. Buiten dat heb ik het zelfs op dié manier niet werkend gekregen. Hey, je m'appelle n00b. :+ (Niet echt hoor, gebruik al jaren regex' maar meestal in PHP en soms in JS en CF. Meestal werken ze wel in CF, maar hier kom ik dus echt niet uit.)

Een collega heeft iets anders bedacht: string replaces met hier en daar een kleine regex erdoor. Dit werkt ook (ookal zijn het dan zeventien (17) functies). En het is niet echt flexibel natuurlijk, string replaces. Maarja, de klok tikt door he. :/

Bla


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Even afgezien van het probleem met de reguliere expressie zelf; hoe wou je onderscheid gaan maken tussen deze 2 regels:
JavaScript:
1
2
var blaat = 'hier staat iets'; // dit is een comment
var foo = 'hier staat ook iets en // dit is geen comment';

;)

Intentionally left blank


  • JaFFoG
  • Registratie: Januari 2003
  • Laatst online: 21-10 15:49
crisp schreef op dinsdag 13 maart 2007 @ 14:40:
Even afgezien van het probleem met de reguliere expressie zelf; hoe wou je onderscheid gaan maken tussen deze 2 regels:
JavaScript:
1
2
var blaat = 'hier staat iets'; // dit is een comment
var foo = 'hier staat ook iets en // dit is geen comment';

;)
Sssst ;) Dat er uitzonderingen bestaan is de volgende zorg, maar hier wordt al redelijk rekening mee gehouden. Bijvoorbeeld bij URL's etc.

Deze is nog niet meegenomen. Thnx voor je input, dat wordt nog ff een namiddagje brainstormen. :')

Bla

Pagina: 1