Wird der reguläre Ausdruck mit /s\w+/g angegeben, so erscheint
als Ergebnis:
Abb. 4
In diesem Fall werden alle Zeichenfolgen gesucht, die mit s
beginnen und auf das ein oder mehrere Buchstaben bis zu einem
Leerraum folgen. Das Wort schön wird nur bis zu den Buchstaben
sch gelesen, weil der Umlaut ö ohne Umwandlung so nicht lesbar
ist. Die einzelnen Treffer werden, wie bei einem Array üblich,
durch Kommata getrennt.
Mit der Match-Methode kann auch ein längerer Text in seine
einzelnen Wörter zerlegt werden. Das erreicht man, indem man den
regulären Ausdruck (/\w+/g verwendet. Als Ergebnis wird
angezeigt:
Abb. 5
Hier ist der ganze Satz in Form eines Arrays angezeigt, die
einzelnen Wörter durch Kommata getrennt. Mit dieser Methode
lassen sich auch bestimmte Folgen von Zahlen herauslesen.
Die
wichtigsten Sonderzeichen
Zeichen | Beschreibung |
* | Sucht das vorangehende Zeichen zero or more times. For example, "zo*" Sucht either "z" or "zoo" |
+ | Sucht das vorangehende Zeichen one or more times. For example, "zo+" Sucht "zoo" but not "z". |
? | Sucht das vorangehende Zeichen zero or one time. For example, "a?ve?" Sucht the "ve" in "never". |
. | Sucht jedes einzelne Zeichen except a newline character. |
\b | Sucht eine Zeichenfolge mit Wortbegrenzung, that is, the position between a word and a space. For example, "er\b" Sucht the "er" in "never" but not the "er" in "verb". |
\B | Sucht eine Zeichenfolge, das keine Wortbegrenzung ist. "ea*r\B" Sucht the "ear" in "never early". |
\d | Sucht ein Zahlenzeichen. Equivalent to [0-9]. |
\D | Sucht ein Zeichen, das keine Zahl ist. Equivalent to [^0-9]. |
\n | Sucht Steuerzeichen für eine neue Zeile |
\r | Sucht Steuerzeichen für Wagenrücklauf |
\s | Sucht ein Leerzeichen etc. Equivalent to "[ \f\n\r\t\v]". |
\S | Sucht alles außer Leerzeichen. Equivalent to "[^ \f\n\r\t\v]". |
\w | Sucht alphanumerische Zeichen und den Unterstrich Equivalent to "[A-Za-z0-9_]". |
\W | Sucht nichtalphanumerische Zeichen. Equivalent to "[^A-Za-z0-9_]". |
^ | Sucht den Anfang einer Zeichenkette |
$ | Sucht das Ende einer Zeichenkette |
Reguläre
Ausdrücke
Dies sind Suchmuster, mit
denen Texte oder Datenbankinhalte sehr effektiv durchsucht werden
können. Wollen wir z.B. in einem Text alle mit un beginnenden
Wörter suchen, so wäre der entsprechende reguläre Ausdruck
dafür
/\bun\w+\s/g
oder:
new RegExp("\\bun\\w+\\s","g").
Bei der ersten Schreibweise werden die zu suchenden Buchstaben un
mit den speziellen Bezeichnungen \b für Wortanfang, \w+ für
mehrere beliebige alphanumerische Zeichen und \s für eine
Leerstelle zwischen Schrägstriche gesetzt, dahinter g als
Kennzeichen für eine globale Suche. \bun\w+\s sucht also
zunächst un am Wortanfang, dann die weiteren folgenden
alphanumerischen Zeichen und schließlich eine Leerstelle, die
das Wort im Text abschließt. Diese Schreibweise kann man direkt
bei den Methoden match, search und replace anwenden, also z.B.
Tr=T.match(/\bun\w+\s/g);
Der reguläre Ausdruck wird hier als Suchmuster in dem Text T
gesucht. Die Treffer werden als Array in Tr gespeichert.
Bei der zweiten Schreibweise muß der über das Schlüsselwort
new erzeugte reguläre Ausdruck zunächst in einer Variablen
gespeichert werden:
A=new RegExp("\\bun\\w+\\s","g");
Hier sind alle Kennzeichnungen in Anführungszeichen gesetzt. Die
speziellen Kennzeichnungen \b, \w und \s werden durch ein
zusätzliches \ gekennzeichnet. Das g steht, durch ein Komma
getrennt, ebenfalls in Anführungszeichen. Danach kann diese
Variable bei einer Methode eingesetzt werden. Das obere Beispiel
der Match-Methode kann dann so geschrieben werden:
Tr.T.match(A);
Bei einer vorgegebenen Zeichenkette (hier z.B. un) wird man die
erste direkte Schreibweise bevorzugen. Ist dagegen die
Zeichenkette eine noch unbekannte Variable, so kann bei dieser
Art von Suchmuster nur die zweite Schreibweise, d.h. die mit dem
Konstruktor new, angewandt werden.
toUpperCase()
-- toLowerCase()
Diese Methoden wandeln
einen String in Groß- bzw. Kleinbuchstaben um. In den Klammern
werden keine Parameter angegeben.
length
Eine Eigenschaft des Stringobjekts (deshalb ohne Klammer).
Ermittelt die Länge, d.h. die Anzahl der Zeichen und Leerzeichen
eines Strings.
link ()
Mit dieser Methode wird ein String in einen Hyperlink verwandelt.
In der Klammer wird die URL-Adresse mit Anführungszeichen
angegeben. Bewirkt dasselbe wie in HTML über das Attribut HREF
und die Verwendung der Anker <a> und </a>, zwischen
denen der anklickbare Text gesetzt wird.
Beispiel:
1) <script>
2) ZS="Acta
Informatica".link("http://link.springer.de/link/service/journals/00236/");
3) document.write(ZS);
4) </script>
In der 2. Zeile wird der Hyperlink gebildet, in der 3. Zeile
ausgeschrieben. Abbildung zeigt den anklickbaren
Zeitschriftentitel, der zur originalen Internetseite dieser
Zeitschrift führt.
Abb. 6
Arrays
Das Arrayobjekt ist eines der wichtigsten JavaScript-Objekte, das
in den hier dargestellten Anwendungen immer wieder vorkommt.
Array (engl. = Feld) bedeutet soviel wie eine Folge von
gleichartigen Teilen oder Elementen. Arrays können z.B. die
einzelnen Wörter eines Satzes oder Textes sein, die einzelnen
Sätze eines Textes oder die einzelnen Titel einer Bibliographie,
die einzelnen Abschnitte eines Aufsatzes usw.
Ein Array wird, wie in dem oberen Match-Beispiel gezeigt,
automatisch durch die Anwendung der globalen Match-Methode
erzeugt, ebenso bei der Anwendung der Split-Methode auf ein
Stringobjekt. Diese kommt in den hier vorgestellten Beispielen
besonders häufig vor. Dabei wird jedesmal eine längere oder
kürzere Zeichenfolge, ein Text, eine Liste usw. in eine Reihe
von gleichartigen Teilen zerlegt. Hinter der Methodenbezeichnung
split in Klammern das Trennungselement, das können
Buchstabenfolgen, Zahlen, neue Zeilen, Leerstellen sein, wie hier
z.B.:
S="Das ist aber sehr schön";
SA=S.split (" ");
alert(SA);
Das Ergebnis ist hier dasselbe wie bei der Match-Methode:
Abb. 7
Unabhängig von der
Erzeugung eines Arrays durch die Match- oder Split-Methode eines
Strings kann ein Array auch durch das Schlüsselwort new, den
Objektnamen Array und der Angabe der einzelnen Teile in Klammern
entstehen:
A = new Array ("aber", "das",
"ist", "doch", "so");
Hinter der festgelegten Konstruktorbezeichnung new Array in
Klammern die einzelnen Elemente des Arrays, in diesem Fall
einzelne Wörter, in Anführungszeichen, weil es sich hier um
Zeichenfolgen handelt. Das Ergebnis wird in der Variablen A
gespeichert.
Die einzelnen Elemente eines Arrays können durch eine
Indexnummer in eckigen Klammern angesprochen werden. Der erste
Teil eines Arrays hat immer die IndexNr 0, der zweite 1, der
dritte 2 usw. Die einzelnen Teile werden also durchnumeriert,
beginnend mit 0. Der 4. Teil des Array A wird entsprechend mit
A[3] bezeichnet. Soll der vierte Teil des Arrays mit der
Alert-Methode angewählt und gezeigt werden, so schreibt man:
alert (A[3]);
Im Alert-Fenster erscheint doch.
Methoden und
Eigenschaften des Arrayobjekts
length
Mit dieser Eigenschaft wird die Anzahl der Elemente eines Arrays
festgestellt.
Beispiel:
S="das sind immer wieder die gleichen Schritte";
SA=S.split(" ");
alert(SA.length);
Der in Anführungszeichen angegebene Satz ist ein Stringobjekt
und wird in der Variablen S gespeichert.
Durch die Split-Methode mit einer Leerstelle als Trennungselement
wird daraus der Array SA.
Mit alert wird das Ergebnis von SA.length, d.h. die Zahl der
Elemente angezeigt. Diese ist in diesem Fall 7.
join ( )
Mit dieser Methode werden die Elemente eines Arrays zu einem
String zusammengefügt. In der Klammer wird ein Trennungszeichen
angegeben. Wird z.B. " " für eine Leerstelle
angegeben, so werden die Arrayelemente, durch Leerstellen
getrennt, hintereinander gereiht. Ohne Trennungszeichen werden
die einzelnen Arrayelemente durch Kommata von einander getrennt.
sort ( )
Diese Methode ist eine der effektivsten Methoden von JavaScript
überhaupt. Mit einer einzigen kleinen Zeile können
umfangreiche, in Arrays verwandelte Datenmengen im Nu sortiert
werden.
Soll mit dieser Methode eine alphabetische oder lexikalische
Anordnung eines Arrays erreicht werden, so werden in der Klammer
keine Werte als Parameter eingegeben. Sollen Zahlen numerisch
sortiert werden, so muß eine einfache Vergleichsfunktion
verwendet werden, die mit dem frei gewählten Funktionsnamen
NumSort so definiert wird:
function Numsort(a,b)
{
return a-b
}
Der Funktionsname wird als Parameter in die Klammer übernommen.
Beispiel:
1) S="1,3,5,4,9,8,12,10";
2) SA=S.split(",");
3) SB=SA.sort(Numsort);
4) function Numsort(a,b)
5) {
6) return a-b
7) }
8) alert(SB);
Mit alert wird die numerische Reihenfolge der Zahlen angezeigt:
Abb. 8
slice ( )
Mit dieser Methode wird ein Teil aus einem Array extrahiert. In
der Klammer werden die Indexwerte des ersten und des letzten zu
extrahierenden Elementes angegeben.
concat ( )
Mit dieser Methode wird ein Array an einen anderen angehängt. In
der Klammer steht der Name des anzuhängenden Arrays.
Statements
Nach der kurzen Darstellung des Arrayobjekts kommen wir zu einer
anderen Gruppe von Sprachelementen einer Programmiersprache, den
sogen. Statements. Dies sind Schlüsselwörter, die wesentlich
für den Programmablauf sind, ohne die kein vollwertiges Programm
denkbar ist. In den vorangehenden Beispielen von kleinen linearen
Programmabläufen wurde davon noch kein Gebrauch gemacht. Unter
einer Reihe von Statements sind es lediglich zwei, die beiden
Schlüsselwörtern for und if, die grundlegend sind für die im
zweiten Teil dargestellten umfangreichen und komplizierteren
Beispiele.
Die
For-Schleife
Sobald ein Array durch die o.g. Methoden erzeugt worden ist,
können die einzelnen Teile des Arrays mit einer For-Schleife
weiter bearbeitet werden. Dadurch werden die gleichen Prozeduren
für alle Teile in gleicher Weise angewandt. Daher brauchen die
entsprechenden Programmanweisungen nur einmal notiert zu werden.
Soll z.B. der oben genannte Satz mit großen Anfangsbuchstaben
geschrieben werden, so könnte man dies mit einer For-Schleife so
erreichen:
1) <script>
2) S="Das ist doch alles sehr schön";
3) SA=S.split (" ");
4) for (x=0;x<SA.length;x++)
5) {
6) SB=SA[x].substring(0,1);
7) SC=SB.toUpperCase();
8) SD=SA[x].replace(SB,SC);
9) document.write(SD+" ");
10) }
11) </script>
4) In Klammern hinter for wird die Indexvariable x zunächst
belegt mit 0. x<SA.length gibt die maximale Größe von x an,
die kleiner sein muß als die Gesamtanzahl SA.length und
schließlich x++, alles durch Semikolons voneinander getrennt.
x=0 bedeutet, die For-Schleife beginnt mit dem Indexwert 0, d.h.
dem ersten Teil des Arrays. SA.length ist die Anzahl der Elemente
des Arrays S. Lenght ist eine Methode zur Bestimmung der Länge
sowohl eines Strings als auch eines Arrays. x<SA.length gibt
die maximal zu durchlaufende Anzahl der Durchläufe an, die hier
kleiner sein soll als die Anzahl der Elemente des Arrays. Wenn
der Satz 6 Wörter hat, wie hier, ist SA.length 6. Es finden also
6 Durchläufe statt. x++ ist eine Schreibweise dafür, daß der
Indexwert x jedesmal um eine 1 erhöht wird, ein Inkrement, das
Gegenteil davon wäre das Dekrement x--.
5) Nach der Klammer kein Semikolon, sondern eine öffnende
geschweifte Klammer und dann die einzelnen Anweisungen, der
Anweisungsblock.
6) SB=SA[x].substring(0,1); aus dem Array-Element mit der IndexNr
x wird das erste Zeichen mit der Substring-Methode herausgelesen
und in SB gespeichert.
7) SC=SB.toUpperCase(); das Stringobjekt SB, also das erste
Zeichen wird mit toUpperCase() in einen Großbuchstaben
verwandelt, falls kleiner Buchstabe. Ergebnis gespeichert in SC.
8) SD=SA[x].replace(SB,SC); in dem Arrayelement wird das erste
Zeichen SB durch SC ersetzt und in SD gespeichert.
9) document.write(SD+" "); ausgeschrieben wird SD
gefolgt von einer Leerstelle. Nacheinander wird jedes einzelne
Wort mit großem Anfangsbuchstaben und folgendem Zwischenraum
ausgeschrieben. Ohne diese Leerstelle würden die Wörter
aneinandergereiht ohne Zwischenraum geschrieben.
Die
If-Bedingung
Das Ausführen von bestimmten Programmanweisungen wird sehr oft
von bestimmten Bedingungen abhängig gemacht. Sollen z.B. nur die
Buchstaben a und i im vorigen Programm groß geschrieben werden,
so wird diese Bedingung eingeleitet mit if, gefolgt von dem
Gegenstand der Bedingung in Klammern, hier also.:
if(SB=="a"||SB=="i")
SC=SB.toUpperCase();
Beachten Sie == ist ein Gleichsetzungszeichen, = ist ein
Zuweisungszeichen. || bedeutet oder. Hinter der schließenden
Klammer folgt kein Semikolon. Wenn nur eine Anweisung folgt,
können die geschweiften Klammern, die bei mehreren Anweisungen
stehen müssen, wegfallen.
7) und 8) Falls das erste Zeichen SB ein A oder I ist, soll
dieses in Großbuchstaben geschrieben werden.
10) Im anderen Fall, ausgedrückt durch else, soll der Buchstabe
nicht verändert werden, hier wird 11) SB unverändert zu SC, was
man so schreibt: SC=SB. (Auch hier keine geschweifte Klammer,
weil nur eine Anweisung.)
Das ganze Programm würde demnach lauten:
1) <script>
2) S="Das ist aber sehr schön";
3) SA=S.split (" ");
4) alert(SA);
5) alert(SA[3]);
6) for (x=0;x<SA.length;x++)
7) {
8) SB=SA[x].substring(0,1);
9) if(SB=="a"||SB=="i")
10) SC=SB.toUpperCase(); /*Zeichenkette SB wird in
Großbuchstaben geschrieben und in SC gespeichert*/
11) else
12) SC=SB;
13) SD=SA[x].replace(SB,SC);
14) document.write(SD+" ");
15) }
16) </script>
Das ausgeschriebene Ergebnis:
Abb. 9
if(SB=="a"||SB=="i") falls SB gleich a oder
falls SB gleich i ist (|| = Oder-Operator)
Operatoren
Nach Objekten, Methoden und Statements bilden die Operatoren eine
weitere wichtige Gruppe jeder Programmiersprache. In den
vorangehenden Beispielen wurden schon einige der wichtigsten
Operatoren verwendet. Während, wie schon oben angedeutet, das
einfache Gleichheitszeichen als Zuweisungsoperator dient, der am
häufigsten in einem Skript verwendete Operator, wobei ein Wert
einer Variablenbezeichnung zugewiesen wird, ist das doppelte
Gleichheitszeichen einer der sogen. Vergleichsoperatoren. Weitere
Vergleichsoperatoren sind != für ungleich, > für größer
und < für kleiner. Der Oder-Operator gehört zu den logischen
Operatoren, neben dem Und-Operator && und dem
Nichtoperator ! Logische und Zuweisungsoperatoren finden z.B. in
If-Bedingungen häufig Verwendung. Außerdem gibt es noch die
arithmetischen Operatoren +, -, * und ++ als Inkrementierung und
-- als Dekrementierung.
Zusammenfassung
der bisher besprochenen JavaScript-Elemente
Allgemeine Schreibweise (Einbettung in HTML, Anfang und Ende
eines Skripts, Interpunktion, Klammern, Funktionen)
JavaScript kann an beliebiger Stelle innerhalb eines
HTML-Doluments stehen.
Einleitung mit <script language=javascript> oder auch nur
mit <script>,
Ende mit </script>
Jede Anweisung mit Semikolon abschließen, z.B.
document.write(v);
Daneben Verwendung von Kommata, Punkten und Ausrufungszeichen.
Runde Klammern und eckige Klammern. Runde Klammern bei
If-Bedingungen, For-Schleifen, bei vielen Stringobjekten. Eckige
Klammern zur Indexangabe bei Arrays. Geschweifte Klammern für
mehrere zusammengehörige Befehlszeilen, Anweisungsblöcke. Jeder
einleitenden Klammer muß eine abschließende Klammer
entsprechen.
Funktionen werden mit geschweiften Klammern eingeleitet und
beendet.
Variablen
Frei gewählte Benennung für einen zu speichernden Wert
(Zeichenfolge, Zahl, bestimmtes Frame oder Fenster,
Formularfeld). Der unter einer Variablenbenennung gespeicherte
Wert wird sehr oft zu einem Objekt, an dem Methoden, Funktionen,
wertverändernde Aktionen ausgeführt werden. Die
Variablenbenennung wird so zu einer gleichlautenden
Objektbenennung, vor allem bei Stringobjekten, z.B.
v="das ist aber schön";
va=v.replace("schön", schlecht);
Eine Variable wird auch oft einer Methode als auszuführenden
Wert zugewiesen, z.B.:
V= "das ist aber schön";
document.write(V);
Neben den frei gewählten Objektbenennungen wie für diese
Stringobjekte gibt es vordefinierte Objekte in einer Stufenfolge
von dem obersten Objekt window, zu den Objekten document, frame,
forms, elements usw.
Methoden sind von wenigen Ausnahmen abgesehen an Objekte
gebunden. Es gibt Methoden, die an ganz bestimmte Objekte
gebunden sind, wie z.B. die Methode write an das Objekt document.
Methoden sind immer vordefiniert.
Eigenschaften sind ähnlich wie Methoden oft an bestimmte Objekte
gebunden. Sie können aber auch frei definiert werden. Im
Unterschied zu Methoden werden sie ohne folgende Klammer notiert.
Statements
If-Bedingung: nach if folgt in runden Klammern der Inhalt dieser
Bedingung, z.B.: if(x<10), d.h. falls x kleiner als 10 ist,
d.h. nur für Werte weniger als 10.
For-Schleife: nach for folgen in runden Klammern die einer
Variablen (z.B. x) zugewiesenen Indexanfangs- und Indexendwerte
(eines Arrays) der zu durchlaufenden Schleife sowie der
Zählfaktor , z.B. x++, wenn jeweils der Indexwert um eins
erhöht wird. Dazwischen steht jeweils ein Semikolon:
for(x=0; x=A.length; x++)
Operatoren
= Zuweisung
== Gleichheitsoperator
|| oder
> größer
< kleiner
&& und
!= nicht
Einige wichtige Eventhandler
Aufruf einer Funktion
onclick beim Anklicken eines Schalters oder eines Textes
onload beim Laden der Seite
onMouseOver wenn die Maus auf einen bestimmten Bereich einer
Seite befindet
onKeyPress wenn eine Taste gedrückt wird
Zurück