:  Retur til startside  : Regular Expression, Søgestrenge RegExp  :  Til JavaScript startside

S T R E N G B E H A N D L I N G

 

Strenge, og standardobjektet String

Strenge defineres ved at skrive værdien i gåseøjne: Str = "en række af bogstaver" eller StrObj = new String("flere bogstaver")
Særlige tegn skulle kunne indsættes ved hjælp af backslash \ , men det har jeg aldrig kunnet få til at virke:
\\ = \\" = "\' = ' \n = linieskift 
\xNN :NN er et 2-cifret hextal
    ( det virker ! )
ANSI-tegn nr NN, f.eks. <script> document.write("\x40\x41") </script> skriver da tegnene @ og A er ansi-tegn nr. 64 og 65, og 64 og 65 som hextal er 40 og 41.
\xNNNN :NNNN er et 4-cifret hextal UNICODE -tegn nr NNNN, f.eks. \x03BB =  burde skrive lambda ( λ ) virker ikke
 
<script language=javaScript>var str="strengØøe"; var s2="Esto";</script> definerer variable brugt i eksemplerne i tabellen. reg_exp betyder et
Regular Expression
Eneste variabel ejet af streng er "length". str.length=
 
 
  funktion()eksempel  uddybende forklaring
 anchor("anchorNavn") str.anchor("NytAnker") Laver et anker, ligesom
<A name=NytAnker>
 big( ) str.big() = 
 blink( ) str.blink() =  Blink (dúr kun i Netscape og Firefox)
 bold( ) str.bold() = 
 charAt(index) str.charAt(3) =  1ste position = nr. 0
    -"- str.charAt(9) =  Max. index er 8
 charCodeAt(index) str.charCodeAt(3) =  e er ansitegn nr. 101
    -"- str.charCodeAt(9) =  I eksemplet er max. index 8
    -"-   Ak og ve, charCodeAt virker ikke hvis tegnets nummer er mellem 128 og 159, se
 concat(string2) str.concat(s2) =  som operatoren +
 fixed( ) str.fixed() =  alle tegn samme bredde
 fontcolor("#rrggbb") str.fontcolor("#FF0000") = 
 fontsize(1 til 7) str.fontsize(5) =  1=mindst, 7 størst
 fromCharCode(n1,..) String.fromCharCode(64,65,66,67,128) = Tegn nr. 64,65,66,67 (og nr 128 med fejl).
NB: Metode til String, ikke str; virker ikke på bl.a. tegn nr 128, €. Derfor har jeg lavet en alternativ metode, klik:
 indexOf("string") str.indexOf("en") = 
    -"- str.indexOf("Q") = 
 italics( ) str.italics() = 
 lastIndexOf("string2")str.lastIndexOf("e") = 
 length AbC.length  =  En egenskab, derfor uden ()
 link(URL) str.link("#NytAnker") Klik for hop til "anchor" ovenfor
 match(reg_exp) str.match(/[Ee]/) =  den del af reg_exp der matcher
 replace(reg_exp,"string2")    str.replace(/e/,"jjj") = Kun første forekomst
 search(reg_exp) str.search(/e/) = 
 slice(i) str.slice(3) = 
 slice(i,j) str.slice(3,5) = 
 slice(0,str.length-1)str.slice(0,str.length-1)= str minus bagerste tegn
 small() str.small() = 
 split(char) str.split("e") = 
 strike() str.strike() = 
 sub() str.sub() =  som <SUB> i HTML   (i nogle ældre browsere fejlagtigt som som <SUP> )   
 substr(start, lenght)str.substr(2,2) =  1.ste tegn position 1
 substring(n1, n2) str.substring(2,5) =  fra pos. n1 til pos (n2-1)
 sup() str.sup() =  som <SUP> i HTML
 toLowerCase() str.toLowerCase() =  str er uændret
 toUpperCase() str.toUpperCase() = 
 

Operatorer

der virker på strenge:
 +  +=  =  ==  !=       jeg sætter:
  < script >   var s1="amanda";   s2="Esto" /* var allerede defineret ovenfor */   var s3="amanda";   var s4="Amanda" </script>
  Så er:
 s1==s2 = 
 s1==s3 = 
 s1==s4 = 
 s1!=s2 = 
 s1!=s3 = 
 s1!=s4 = 
 s1+=s2  sætter  s1 = s1+s2 = 
 s1+=s3  sætter  s1 = s1+s3 = 
 s1+=s4  sætter  s1 = s1+s4 = 

Strenges alfabetisering

JavaScript har ikke en funktion til at se hvilken streng der kommer først i alfabetet. Jeg har derfor lavet en såden, som du kan se ved at klikke her:

String.fromCharCode virker ikke altid

Det er pinligt at String.fromCharCode(xx) ikke virker for xx=128, for ældre browsere inden € blev et anerkendt tegn la'gå, men med bange anelser vil jeg nu her skrive alle tegnene #20-#255, dels som &xxx; kode og dels med String.fromCharCode()- Netscape forstår ikke &#xxx; kode for tegn nr 128, 129, 140, 141, 142, 143, 144, 157, 158 (for Firefox ligeså, dog kun nr. 129, 141, 143, 144, 157) så i tabellen til venstre er disse 9 tegn i stedet skrevet ind i kildeteksten ved at holde Alt-tasten nede og taste 0xxx:
Tegn lavet med &#xxxx; kode
   0123456789 10123456789    
 
Tegn lavet med String.fromCharCode(xxx)
   0123456789 10123456789    
 
 
Og ak ja - i min browser virker
String.fromCharCode(tal) ikke for tal i intervallet 127-159

(for tal = 127, 129, 141, 143, 144, 157 er det dog muligvis ikke fromCharCode's fejl)

Problemet kan løses ved at omdefinere (overskrive) String.fromCharCode(tal), eller ved at definere en ny funktion, hvilket jeg har gjort - egentlig er der ikke noget i vejen for at kalde den fromCharCode(), men jeg har alligevel valgt at kalde den xfromCharCode. Du ser resultatet til højre og kildeteksten nedenfor:

<script language=JavaScript>

var tegn128_159="€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–"+"—˜™š›œžŸ";

function xfromCharCode(){
// function String.fromCharCode(tal) virker ikke for tal 127-149
var facit="";
for (var i=0; i<xfromCharCode.arguments.length; i++){
  var tegnnr=xfromCharCode.arguments[i];
  if (tegnnr ==0) facit +=" "
//tegn nr 0 skrives ikke
  else if ((tegnnr<127)||(tegnnr>159))
        facit+=String.fromCharCode(tegnnr)
    if (tegnnr>=128){
// Tegn nr 127 er ingenting, ikke engang et blanktegn
      facit += tegn128_159.charAt(Math.floor(tegnnr)-128);
    } // end if tegnnr >= 128
} // end for i
return facit;
}// end function xfromCharCode

</Script>


function xfromCharCode er et objekt af typen function, de ejer en variabel arguments = en array med de parametre funktionen er kaldt med. xfromCharCode.arguments.length er derfor antallet af parametre, og xfromCharCode.arguments[2] er den 3.je parameter.

xfromCharCode ( og String.fromCharCode ) skriver tegn fra UNICODE-tegnsættet , der er en udvidelse af ansi-tegnsættet:
xfromCharCode(945,946,947,948,949,950,951,952,953,954,955,956) =
Tegn lavet med xfromCharCode(xxx)
   0123456789 10123456789    
 
 

xfromCharCode(63,64,65,66,67,"Olsen",68) =
xfromCharCode(65,-1,66,500,67,0,68) =
xfromCharCode(65,0,66,500,67,0.4,68) =
xfromCharCode(65,65.1,65.4,65.5,65.6,66) =
xfromCharCode(65,-100,500,4e10,66) =
xfromCharCode(65,65+1,65+2) =

Vi ser, at xfromCharCode opfører sig nogenlunde fornuftigt selvom den får ufornuftige parametre. Decimalbrøker får fjernet tallene efter kommaet, regnestykke udregnes, og der ses bort fra umulige strenge såsom "Olsen".
Der er derfor ikke nogen særlig grund til at lave et tjek, at parametrene er positive heltal.

I programmeringssproget C bruges tegn nr 0 til at afslutte en streng med. Det synes også at være tilfældet i javaScript, String.fromCharCode(65,66) =  String.fromCharCode(65,0,66) =  : Der står først et A, men hvis der så står et et tegn nr 0 afsluttes strengen, og B'et bagved ses ikke (... jo det ses med Firefox, men ikke med I.Explorer og Netscape).
I min funktion xfromCharCode har jeg derfor valgt ikke ar skrive tegn nr. 0



charCodeAt(index) virker ikke altid

Det er pinligt at hvis s er en streng, så giver s.charCodeAt(indexnr) en forkert charcode hvis tegnet i positionen svarende til indexnr er et tegn med ansinummer mellem 128 og 159. Jeg har derfor måttet lave en ny funktion til erstatning.

Tabellen til højre viser hvad tegnnumrene laves om til, 1.ste kolonne viser tegnets rigtige nummer, 2.den kolonne hvilket tegn det er, og 3.je kolonne hvilket nummer charCodeAt giver det når det støder på tegnet, og 4.de kolonne do med xcharCodeAt. Kolonnerne 1, 3 og 4 burde så være ens, men ak for kolonne 2:  med Internet Explorer gælder det kun for de "forbudte" tegn nr. 129, 141, 143, 144 og 157, og med Netscape får osse disse tegne gale numre.

Jeg tilføjer nu en metode xcharCodeAt til objekter af typen String. Hertil bruger jeg jeg variablen prototype
arvet fra objekttype Object.

<script language=JavaScript>
tegn128_159="€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–"+"—˜™š›œžŸ";
//tegn128_159 er defineret ovenfor

function xxCharCodeAt(iii){
  var xxFacit="";
  if (iii<this.length){
    var xxCh=this.charAt(iii);
    var xxi=tegn128_159.indexOf(xxCh);
    if (xxi<0) xxFacit=this.charCodeAt(iii)
        else xxFacit=128+xxi
  }
  return xxFacit;
}

String.prototype.xcharCodeAt=xxCharCodeAt;

<</script>

Eks: var s="@AB€C";
document.write(s.xcharCodeAt(0) +" "+s.xcharCodeAt(1) +" "+s.charCodeAt(2) +" "+s.xcharCodeAt(3) +" "+s.xcharCodeAt(4) +" men s.xcharCodeAt(5) = "+s.xcharCodeAt(5));
skriver   
  
  nr   char  Nyt nr med
 charCodeAt 
Nyt nr med
 xcharCodeAt 

Søgestrenge  (regular expression)
standardobjektet RegExp

For at lave søgning i en skal vi først definere en søgestreng ( eller et objekt af typen RegExp), derefter skal vi bruge en funktion til at finde en funktionsværdi, enten
  ·   funktionsværdi = Streng . funktion( RegExp )    eller
  ·   funktionsværdi = RegExp . funktion( Streng )
JavaScript kan lave avancerede søgestrenge, men prisen herfor er at det bliver så kompliceret som det næsten kan blive, så jeg forenkler ved kun at bruge metoden search og henviser i øvrigt til Netscape's dokumentation.
Til String.funktionerne() er der et hurtigt eksempel i streng-afsnittet ovenfor.
 funktion            funktionsværdi
 String.IndexOf(str2)   Positionen af str2 i streng (1.ste pos = 0), eller -1 hvis den ikke findes 
 String.lastIndexOf(str2)  Sidste pos. af str2 i streng (1.ste pos = 0), eller -1 hvis den ikke findes 
 String.length   antal gogstaver i strengen ... en egenskab, ikke en funktion, og derfor uden () 
 String.search(Reg_Exp)   Positionen af Reg_Exp i streng (1.ste pos = 0), eller -1 hvis den ikke findes 
 String.match(Reg_Exp)   En array med mange informationer
 String.replace(Reg_Exp)   Som sideeffekt erstattes noget i strengen med Reg_Exp
 String.split(Reg_Exp)   Strengen hakket over til array af strenge
 Reg_Exp.test(String)   true eller false
 Reg_Exp.exec(String)   En array med mange informationer (som match)
Først skal Reg_Exp defineres, den skrives mellem to skråstreger :  Reg_Exp = /søgestreng/ ( vil man definere den som object bruges Reg_Exp = New RegExp("søgestreng") ) .
Her kun et lille udpluk af mulighederne :
    søgestrengen bliver
/ole/ole
/ole/iole, uanset store/små bogstaver (ignore uppercase)
/[oO]le/ole eller Ole
/\SOle/Ole i starten af et ord
/ole[1-9,x]/ole1, ole2, ... ole9, olex
 
Som eksempel laver jeg nu en array:
s= new Array("", "Nul", "ole", "Tolertull", "skole","skoleboler", "kjole", "kjoLe", "kjOle")
og vil lede med s[i].search("/[oO]le/") når du klikker her: