Avatar billede sjh Nybegynder
12. juni 2007 - 17:19 Der er 10 kommentarer og
1 løsning

Replace($1).toLowerCase

Hvordan får jeg $1 til at blive små bogstaver ?

var result = '<B>B</B><U>U</U><I>I</I>';

result = result.replace(/<(B|I|U)>/gi, '<tag:$1>'.toLowerCase());
result = result.replace(/<\/(B|I|U)>/gi, '</tag:$1>'.toLowerCase());


result er så:
<tag:b>B</tag:b><tag:u>U</tag:u><tag:i>I</tag:i>
Avatar billede sjh Nybegynder
12. juni 2007 - 18:13 #1
hmm har fået lavet et lappe løsning.. ved at lave alle tags små først og der efter køre de andre 2 koder..

result = result.replace(/<[\/]*([A-Z]+)([^>]*?)>/ig, function(match){return match.toLowerCase()});

result = result.replace(/<(b|i|u)>/g, '<tag:$1>');
result = result.replace(/<\/(b|i|u)>/g, '</tag:$1>');

Men er der en som har en bedre løsning så kom bare med den :D
Avatar billede mclemens Nybegynder
12. juni 2007 - 19:30 #2
Kan ikke se nogen bedre måde at gøre det på, men
kendte ikke muligheden for at kaste en funktion ind ...

Hvad med:

var result = '<B>B</B><U>U</U><I>I</I>';

result = result.replace(/<?(\/)?(b|i|u)>/ig, function(a){a=a.toLowerCase();b=a.match(/\//)?"/":""; return "<"+b+"tag:"+a.match(/\w/)+">"});

alert(result);
Avatar billede mclemens Nybegynder
12. juni 2007 - 22:35 #3
Denne kan også laves:

var result = '<B>B</B><U>U</U><I>I</I>';

var reg = /<?(\/)?(b|i|u)>/ig;
result = result.replace(reg, function(a){b=reg.exec(a);return "<"+RegExp.$1+"tag:"+RegExp.$2.toLowerCase()+">"});

alert(result);

... Desværre kan RegExp.$1 / $2 ikke kaldes direkte i den første regexp :-/
Avatar billede mclemens Nybegynder
12. juni 2007 - 22:36 #4
b=reg.exec(a); i ovenstående behøver kun at være reg.exec(a);
Avatar billede sjh Nybegynder
13. juni 2007 - 07:59 #5
Ja det virker fint hvis det ikke lige skal køre gennem en php-file da start tag til php er <? da får jeg fejl i :

var reg = /<? ..... HER

Og nu er spørsmålet om der ikke vil være mere hastighed i at lave alle tags til små bogstaver først, da jeg så kan ungå at bruge "i" da der er flere tags som skal erstattes ?

    result = result.replace(/\r/g, '');
    result = result.replace(/\n/g, '');
    result = result.replace(/&nbsp;/g, ' ');
    result = result.replace(/  /g, ' ');
    result = result.replace(/<[\/]*([A-Z]+)([^>]*?)>/ig, function(match){return match.toLowerCase()});
    result = result.replace(/<span style.*?font-weight: bold;">(.*?)<\/span>/g, '<tag:b>$1</tag:b>');
    result = result.replace(/<([\/]*)blockquote>/g, '<$1tag:quote>');
    result = result.replace(/<font (size|color)=(.*?)>/g, '<tag:font $1=$2>');
    result = result.replace(/<img.*?src="(.*?)".*?>/g, '<tag:img url=$1/>');
    result = result.replace(/<a href="(.*?)">(.*?)<\/a>/g, '<tag:link url=$1>$2</tag:link>');
    result = result.replace(/<([\/]*)strong>/g, '<$1tag:b>');
    result = result.replace(/<([\/]*)(hr|br|ul|ol|li)[^>]*>/g, '<tag:$1>');
    result = result.replace(/<\/font>/g, '<tag:$1>');
    result = result.replace(/<(p|div) align=(.*?)>/g, '<tag:p align=$1>');
    result = result.replace(/<(p|div)[^>]*>/g, '<tag:p>');
    result = result.replace(/<\/(p|div)>/g, '</tag:p>');
    result = result.replace(/<([\/]*)(b|i|u)[^>]*>/g, '<$1tag:$2>');

Du må også godt smide et svar.
Avatar billede mclemens Nybegynder
13. juni 2007 - 10:55 #6
var reg = /<? echo"<"."?"; ?> ... Men
det ?'tegn efter < havde vist intet formål :P

Har lige testet din første og de to jeg kastede, det med at rette til
små bogstaver linjen henover og så gennemløbe igen er mest optimal, mine
havde nogle dårlige ms. Tror det er fordi jeg kaldte henholdsvis a.match(/\//)
eller reg.exec(a) for hvert match der blev fundet i replacen ...


"Og nu er spørsmålet om der ikke vil være mere hastighed i at lave alle tags til små bogstaver først, da jeg så kan ungå at bruge "i" da der er flere tags som skal erstattes ?"

Jeg tror du har helt ret, hvilket min test også viser...
Umiddelbart er i vel ikke nødvendigt her:
result = result.replace(/<[\/]*([A-Z]+)([^>]*?)>/ig, function(match){return match.toLowerCase()});
... Hvis det ikke er A-Z, men a-z så behøver den ikke rette matchen.

Behold pointene ;)






/* IE: 125,625,328 */
/* FF: 328,891,656 */



function a(t){
  var result = '<B>B</B><U>U</U><I>I</I>';
  for(i=0;i<11;i++)result+=result;
  x=new Date().getTime();


  if(t==1){ /* Kommentar: sjh 12/06-2007 18:13:56 */
    result = result.replace(/<[\/]*([A-Z]+)([^>]*?)>/g, function(match){return match.toLowerCase()});

    result = result.replace(/<(b|i|u)>/g, '<tag:$1>');
    result = result.replace(/<\/(b|i|u)>/g, '</tag:$1>');

  }


  else if(t==2){ /* Kommentar: mclemens 12/06-2007 19:30:27 */
    result = result.replace(/<?(\/)?(b|i|u)>/ig, function(a){a=a.toLowerCase();b=a.match(/\//)?"/":""; return

"<"+b+"tag:"+a.match(/\w/)+">"});
  }


  else if(t==3){ /* Kommentar: mclemens 12/06-2007 22:35:34 */
    var reg = /<?(\/)?(b|i|u)>/ig;
    result = result.replace(reg, function(a){b=reg.exec(a);return "<"+RegExp.$1+"tag:"+RegExp.$2.toLowerCase()+">"});
  }

  alert(+new Date().getTime()-x);

}

setTimeout("a(1);",1000);
setTimeout("a(2);",1000);
setTimeout("a(3);",1000);
Avatar billede sjh Nybegynder
13. juni 2007 - 13:39 #7
smid nu bare et svar så jeg kan komme af med nogle af mine point..
Avatar billede mclemens Nybegynder
13. juni 2007 - 14:06 #8
LoL :o)
Avatar billede sjh Nybegynder
13. juni 2007 - 14:31 #9
Mange tak for hjælpen ;)
Avatar billede mclemens Nybegynder
13. juni 2007 - 14:39 #10
Hehe, det var vist ikke rigtig nogen
hjælp, men tak for point og tippet om
at køre funktioner inde fra replacen ;)
Avatar billede sjh Nybegynder
13. juni 2007 - 19:54 #11
hæ hæ.. vi skal jo lære, så længe vi lever ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester