• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] JS und Regexp

mikdoe

Moderator
Zum ersten mal in meinem Leben möchte ich gegen meine eigenen Prinzipien einen Regexp in JS verwenden. Und natürlich gelingt mir das nicht, egal was ich versuche. Hab noch nie so viele unnütze Tuts gesehen wie bei dieser Recherche :mad:
Diese Dinge sollen gemacht werden:
  1. der Strig soll auf den Regexp geprüft werden
  2. im Regexp soll eine Variable verwendet werden
  3. am Ende soll auf $1 zugegriffen werden
In Perl sieht das was ich haben möchte so aus:
Code:
my $suchstring = 'fritz';
my $eingabe = 'fritz20_usw';
if ($eingabe =~ /^$suchstring(\d+)/) {
	print $1;
}

Wäre bitte jemand so lieb und übersetzt mir das in JS. Sonst werde ich damit noch verrückt. :cool-new:
 
Meinst Du sowas:
Code:
var suchstring = "fritz";
var eingabe = "fritz20_usw";
var re = new RegExp("^"+suchstring, "g");//Der erste wert muss "fritz" sein.

// ist der erste wert "fritz" gehe in das if 
if (re.test(eingabe)) {
eingabe = eingabe.match(/\d+/g)[0];// match a digit 
console.log(eingabe);// 20
}

Wenn ich perl noch richtig im Kopf habe dann zeigt $1 auf den ersten Wert in runden Klammern also 20.
Weil, /^$suchstring == fritz und \d+/ nur Zahlen print == 20 Richtig.

Durch den RegExp Constructor hast du die Möglichkeit den suchstring variabel zu gestalten, denke sowas meintest du.

mikdoe schrieb:
Sonst werde ich damit noch verrückt.
Nee, lass mal lieber, ist ungesund.
 
Zuletzt bearbeitet:
Danke xorg aber das passt leider noch nicht, denn bspw. fritzchen20_usw matcht auch und das darf es nicht. Das war nämlich auch eines meiner Problemchen dabei. Und ich würde die Regexp Maschine in JS gern nur einmal pro Vorgang anwerfen und nicht zweimal, dafür gibt es ja RegExp.$1 :icon6:
 
Nachtrag: ich hab das Problem anders gelöst.
Ist also nicht mehr dringend.
Interesse habe ich dennoch, wie man sowas in JS macht.
 
Code:
var suchstring = 'fritz';
var eingabe = 'fritz20_usw';
var re = new RegExp("^" + suchstring + "(\\d+)")
var ret = eingabe.match(re)
if (ret)
{
  document.write(ret[1]);
}
 
möchte ich gegen meine eigenen Prinzipien einen Regexp in JS verwenden
Warum ist das gegen deine Prinzipien? RegExp in JS sind sehr praktisch.

Du kannst im RegExp-Constructor natürlich auch spezifizieren, dass die Zahl direkt nach der Variablen kommt:
Code:
var re = new RegExp("^" + suchstring + "(\\d+)");

Wobei man meib RegExp-Constructor natürlich immer aufpassen muss, was in der Variablen drin steht. Wenn da irgendeines der RegExp-Sonderzeichen drin ist, wird dieses dann natürlich mit seiner Sonderfunktion angewandt, was unerwünschtes Verhalten oder sogar RegExp-Syntaxfehler erzeugen kann. Deswegen hab' ich mir dafür eine extra escape-Funktion geschrieben:
Code:
String.prototype.quoteRegExp = function quoteRegExp(){
	/**
	 * Function String.prototype.quoteRegExp
	 * @name: String.prototype.quoteRegExp
	 * @author: Korbinian Kapsner
	 * @description: escapes all special characters for a RegExp.
	 * @return value: the quoted string
	 */
	
	return this.replace(/([\\\+\*\?\[\^\]\$\(\)\{\}\=\!\|\.])/g, "\\$1");
};

Nachtrag: ich hab das Problem anders gelöst.
Wie denn?
 
Danke hesst und Korbinan, das ist es.
Meine andere Lösung ist, nicht durch die name Attribute zu iterieren sondern gleich die Nodes in ein Array zu legen und durch dieses zu iterieren.

Und dieser RegExp-Constructor ist für mich abschreckend. Aus diesem Grund gehören nach meinen Prinzipien solche Sachen auf den Server, nicht auf den Client. JS ist für mich noch immer Spielerei, ich bin da ziemlich altmodisch :)
 
document.write(ret[1]);
Das hast du doch mit Absicht gemacht! ;)
console.log() ist viel aufschlussreicher.

Und dieser RegExp-Constructor ist für mich abschreckend.
Normalerweise arbeitet man damit auch nicht, sondern mit den Literalen. Aber bei dynamisch erzeugten RegExp muss man einfach über den Constructor gehen.

Was das ganze aber mit Server vs Client zu tun hat, erschließt sich mir nicht ganz. Es geht doch einfach nur um Stringmatching...
 
Das hast du doch mit Absicht gemacht! ;)
natürlich
console.log() ist viel aufschlussreicher.
für aufschlussreich, im sinne von informationen vermitteln, spielt die art der ausgabe hier überhaupt keine rolle, bzw. eher umgekehrt. ein großer teil dürfte nicht mal wissen und damit auch nicht sehen wo bzw. was console.log ausgibt

Was das ganze aber mit Server vs Client zu tun hat, erschließt sich mir nicht ganz. Es geht doch einfach nur um Stringmatching...
wenn man es serverseitig machen kann und js nur für "Spielerei" nutzt macht man es richtig. was nicht bedeutet, dass man dafür nicht auch mal einen regexp benötigt.
 
mikdoe schrieb:
Und ich würde die Regexp Maschine in JS gern nur einmal pro Vorgang anwerfen und nicht zweimal,
Ah ok, beim nächsten mal. xD

mikdoe schrieb:
Und dieser RegExp-Constructor ist für mich abschreckend. Aus diesem Grund gehören nach meinen Prinzipien solche Sachen auf den Server, nicht auf den Client. JS ist für mich noch immer Spielerei
Und was wäre mit NodeJS, das ist JS und Server? Ob man nun die Validierung eins strings auf der Server vornimmt oder beim Client spielt keine rolle.
Im gegenteil um den Server nicht so zu belasten würde ich doch wenigstens ein Teil der Validierung auf der Client Seite machen. Kommt halt drauf auf an was Validiert werden soll.

"JS ist Spielerei" Ja, dieser Meinung sind viele alteingesessene Programmierer. Ich finde JS eine 1a Programmiersprache, sowohl zum erlernen des Programmierens als auch in der Praxis.
JS geht vor allem fast überall. Ehe ich in C irgendwas Cross-compiliert habe, habe ich mein JS Quellcode schon längst wo anders zum laufen gebracht. Perl ist auch schon altbacken.... nagut jede Programmiersprache hat seine Daseinsberechtigung.

tsseh schrieb:
ein großer teil dürfte nicht mal wissen und damit auch nicht sehen wo bzw. was console.log ausgibt
Da gehe ich nicht mit. Wenn man der Meinung ist eine neue Programmiersprache zu erlernen, dann macht man sich doch schlau wie und wo wird was ausgegeben. Wenn man z.B. nach "Hello World in Javascript" sucht wird man zu 90% auf alert oder innerHTML treffen. Ich würde niemals einer Person etwas zeigen/beibringen was man nicht mehr verwenden sollte, z.B document.write. Natürlich meine ich das im sinne eines Vortages/Tutorials.
 
für aufschlussreich, im sinne von informationen vermitteln, spielt die art der ausgabe hier überhaupt keine rolle
Ich meinte damit auch, dass man sich mit console.log(ret) das komplette Objekt ansehen kann. Mit allen Eigenschaften und Untereigenschaften.

damit auch nicht sehen wo bzw. was console.log ausgibt
Dann würde ich alert() nehmen...

wenn man es serverseitig machen kann und js nur für "Spielerei" nutzt macht man es richtig.
Manche Sachen kann man ohne clientseitigem JS einfach nicht machen (z.B. Spiele oder Dienste, gar keine Serverbeteilgung benötigen oder haben dürfen). Aber bei normalen Seiten ich bin auch der Meinung, dass man JS sparsam einsetzen sollte und die Seite auch ohne JS funktionieren soll.

Ob man nun die Validierung eins strings auf der Server vornimmt oder beim Client spielt keine rolle.
Das ist falsch. Du kannst dich nie darauf verlassen, was der Client tut und musst auf dem Server sowieso validieren. Es könnte ja JS deaktiviert sein oder jemand die Validierung auf dem Client gezielt ausschalten/umgehen.
 
Ob man nun die Validierung eins strings auf der Server vornimmt oder beim Client spielt keine rolle.
Im gegenteil um den Server nicht so zu belasten würde ich doch wenigstens ein Teil der Validierung auf der Client Seite machen.
dazu hat kkapsner ja schon alles gesagt

"JS ist Spielerei" Ja, dieser Meinung sind viele alteingesessene Programmierer. Ich finde JS eine 1a Programmiersprache, sowohl zum erlernen des Programmierens als auch in der Praxis.
js ist FÜR spielerei, damit kann es trotzdem eine 1a programmiersprache sein.

Ehe ich in C irgendwas Cross-compiliert habe, habe ich mein JS Quellcode schon längst wo anders zum laufen gebracht.
js kommt dafür auch nie an die geschwindigkeit von C ran. js hat einen sehr begrenzten funktionsumfang, also standardmäßig sind nur die keywords definiert. alles was über schleifen/operatoren/bedingungen hinausgeht, vor allem der zugriff auf das system, muss über externe pakete bereitgestellt werden. in c sind diese sachen größtenteils definiert. und deswegen werden diese externen pakete in c geschrieben und js als schnittstelle zur verfügung gestellt.

Da gehe ich nicht mit. Wenn man der Meinung ist eine neue Programmiersprache zu erlernen, dann macht man sich doch schlau wie und wo wird was ausgegeben.
und deswegen kommen hier auch andauernd leute, die die konsole nicht kennen. außerdem ...

Wenn man z.B. nach "Hello World in Javascript" sucht wird man zu 90% auf alert oder innerHTML treffen.
... such mal nach "Hello World in Javascript", da kommt zu 90% alert oder document.write. und das zurecht, bei alert oder document.write sieht man eben gleich das ergebniss.

Ich würde niemals einer Person etwas zeigen/beibringen was man nicht mehr verwenden sollte, z.B document.write. Natürlich meine ich das im sinne eines Vortages/Tutorials.
in c++ lehrnt man auch erst funktionale programmierung ehe man zu klassen kommt.
außerdem gibt es keinen grund, aus dem man z.B document.write nicht mehr verwenden sollte. oder nenne DU mir einen.

Ich meinte damit auch, dass man sich mit console.log(ret) das komplette Objekt ansehen kann. Mit allen Eigenschaften und Untereigenschaften.
ja, das ist ne feine sache, aber das war hier nicht der fall

Dann würde ich alert() nehmen...
das alert() eigentlich viel gefährlicher als document.write ist, weil es reentrance ermöglicht und damit ein paradigma von js zerstört hatte ich doch bei der letzten diskusionsrunde schon erwähnt.

Manche Sachen kann man ohne clientseitigem JS einfach nicht machen
du kannst eigentlich alles ohne js machen, indem du alles über den server laufen lässt. mit js kann man das ganze aufhübschen und userfreundlicher gestalten. das ist für mich die spielerei.

js ist meiner meinung nach nicht für spiele geeignet. außer man will selbst mal "was mit js machen".

Frage noch: wie sähe der Code aus, wenn ich auf (\d+) über RegExp.$1 zugreifen wollte und nicht über das Array aus .match()?
warum solltest du das wollen? warum über $1 - $9 zugreifen, wenn du ein dynamisches array haben kannst?
 
Code:
var suchstring = 'fritz';
var eingabe = 'fritz20_usw';
var re = new RegExp("^" + suchstring + "(\\d+)")
var ret = eingabe.match(re)
if (ret)
{
  document.write(RegExp.$1);
}
 
in c sind diese sachen größtenteils definiert.
Nicht wirklich. Es gibt die Standardbibliothek, aber die ist eigentlich auch ein Modul... aber JS mit C zu vergleichen ist für keine der beiden Sprachen fair. Haben einfach extrem verschiedene Einsatzgebeite, für die sie konzipiert wurden.

in c++ lehrnt man auch erst funktionale programmierung ehe man zu klassen kommt.
In C++ hat aber auch die funktionalie Programmierung in Produktivcode ihren Platz - ist ja nicht Java.

außerdem gibt es keinen grund, aus dem man z.B document.write nicht mehr verwenden sollte.
http://forum.jswelt.de/javascript/59767-document-write.html - aber ich weiß, dass du da deine Meinung hast und unsere (und die des W3C) nicht teilen wirst.

das war hier nicht der fall
Warum nicht? ret ist ein Array und damit sehe ich gleich alle Einträge. Außerdem gibt mir die Konsole nicht nur die Stringrepräsentation. So kann man z.B. mit document.write() (und auch alert) nicht entscheiden, ob eine Variable jetzt ein String aus Zahlen oder wirklich eine Zahl ist.

du kannst eigentlich alles ohne js machen, indem du alles über den server laufen lässt.
Du kannst nicht alles über den Server laufen lassen. Manche Benutzerinteraktionen (z.B. Drag'n'Drop) sind damit nicht machbar. Auch werden manche Eingabearten ohne JS extrem nervig zu nutzen und zu programmieren (z.B. wenn du eine Eingabeliste mit dynamischer Länge hast).
Außerdem willst du als Benutzer auch manche Daten eigentlich nicht auf einen Server transferieren (z.B. wenn du deine Mails über einen Webmailer Ende-zu-Ende verschlüsseln willst).

js ist meiner meinung nach nicht für spiele geeignet.
Warum nicht? 2048 ist komplett in JS geschrieben. Es kommt auf die Art des Spieles an.

Weil ich dafür gern mal eine funktionierende Syntax sehen würde.
Da gibt es nicht wirklich eine besondere Syntax:
Code:
"hallo".match(/h(.)/);
console.log(RegExp.$1);
 
Nicht wirklich. Es gibt die Standardbibliothek, aber die ist eigentlich auch ein Modul...
ja, aber es gibt einen Standard. egal unter welchem bs, egal mit welchem compiler, selbst für einen 8051-compiler gibt es printf. und mit posix hat man einen standard, mit dem man alle wichtigen schnittstellen zum bs abdecken kann. das gibt es in js nicht. weil js dafür nicht gedacht ist, ...

aber JS mit C zu vergleichen ist für keine der beiden Sprachen fair. Haben einfach extrem verschiedene Einsatzgebeite, für die sie konzipiert wurden.
... da bin ich dabei

In C++ hat aber auch die funktionalie Programmierung in Produktivcode ihren Platz - ist ja nicht Java.
nein, eigentlich nicht. da in c++ eigentlich alle schnittstellen als c-schnittstelle ausgelegt sind, sind API-calls function-calls, ja. selbst kommt man in c++ aber eher nicht in die verlegenheit funktionen zu schreiben - es sei denn für eine eigene API, die dann aber wieder auf eigene objekte zugreift.

http://forum.jswelt.de/javascript/59767-document-write.html - aber ich weiß, dass du da deine Meinung hast und unsere (und die des W3C) nicht teilen wirst.
weil dort kein grund aufgeführt ist, der nicht genau so auch auf andere funktionen zutrifft. was dann wiederum nicht dazu führen sollte einfach eine regel aufzustellen "nutze diese funktion nicht, weil sie in selten auftretenden szenarien unter diesen und jenen randbedingungen zu einem erklärbaren verhalten führt was man aber vielleicht nicht gleich so erwarten würde und man anfangen müsste zu denken und zu verstehen."

Warum nicht? ret ist ein Array und damit sehe ich gleich alle Einträge.
ich, bzw. mikdoe wollten aber nur den geklammerten ausdruck ausgeben

Außerdem gibt mir die Konsole nicht nur die Stringrepräsentation. So kann man z.B. mit document.write() (und auch alert) nicht entscheiden, ob eine Variable jetzt ein String aus Zahlen oder wirklich eine Zahl ist.
das war hier aber definitiv ein string und außerdem war das hier in keinster weise von interesse.
ich sage ja nicht, dass console.log nicht ihre vorteile hat, sondern, dass hier document.write das macht was es soll

Du kannst nicht alles über den Server laufen lassen. Manche Benutzerinteraktionen (z.B. Drag'n'Drop) sind damit nicht machbar. Auch werden manche Eingabearten ohne JS extrem nervig zu nutzen und zu programmieren (z.B. wenn du eine Eingabeliste mit dynamischer Länge hast).
aufhübschen

Warum nicht? 2048 ist komplett in JS geschrieben.
das ist für mich kein spiel, sondern eine js-übung. spiele sind sowas wie WoW, The Elder Scrolls, ...
wo wir gerade dabei sind, kann mir mal jemand erklären warum man Minecraft spielt? das soll ein spiel sein?
 
Ei, hab ich da wieder was entflammt .?

@tsseh, kkapsner. Ich bitte um Disziplin.

tsseh schrieb:
was dann wiederum nicht dazu führen sollte einfach eine regel aufzustellen
Du verstehst uns falsch. Es gibt sowas wie eine Vorbildfunktion. Ich habe in meinem Berufsleben äh.. (pro Jahr 3 Lehrlinge.. insgesamt seit 7 Jahren) insgesamt 21 Lehrlinge ausgebildet.
Aus einigen ist was geworden, andre wiederum... lassen wir das. Jedenfalls hätte ich ein Arschloch sein können und denen immer irgendwelche mist beibringen können (Fataler Fehler weil, habe ich gemacht... nicht gut). Oder anders gesagt, es gibt Situation, da muss man Menschen zeigen wie man es nicht machen soll, einfach damit sie es begreifen. Dann aber sollte man begründen warum man das so nicht machen soll.

kkapsner schrieb:
aber JS mit C zu vergleichen ist für keine der beiden Sprachen fair. Haben einfach extrem verschiedene Einsatzgebeite, für die sie konzipiert wurden.
Habsch doch erwähnt, jede Programmiersprache hat ihre Daseinsberechtigung.

tsseh schrieb:
js kommt dafür auch nie an die geschwindigkeit von C ran. js hat einen sehr begrenzten funktionsumfang, also standardmäßig sind nur die keywords definiert. alles was über schleifen/operatoren/bedingungen hinausgeht, vor allem der zugriff auf das system, muss über externe pakete bereitgestellt werden. in c sind diese sachen größtenteils definiert. und deswegen werden diese externen pakete in c geschrieben und js als schnittstelle zur verfügung gestellt.
Da hast du in alle Punkten recht. Ich meinte ja nur das der Kompilierungs-aufwand bei c größer ist. Allerdings kann man in JS auch USB Geräten steuern, glaube sogar von externen Festplatten lesen und schreiben. Hier wird jedenfalls ein DVB-T Tuner gesteuert: https://github.com/google/radioreceiver/blob/master/extension/rtl2832u.js
Bei Pentium Mainboard konnte man auch bios Werte wie RAM, Temp. und CPU Load in JS abfragen, dass gehört aber zu den Todgeweihten Ideen (ging eh nur im IE).

tsseh schrieb:
js ist meiner meinung nach nicht für spiele geeignet.
Dafür aber:
-SDR's:
-- https://github.com/google/radioreceiver/tree/master/extension
--oder gängiges beispiel http://websdr.ewi.utwente.nl:8901/
--Bald neu: Aktueller Status des DARC-SDR-Projektes

-Emulatoren:
JS_Dosbosx jsdosbox
GameBoy Advance Emulator https://github.com/taisel/IodineGBA



kkapsner schrieb:
Warum nicht? 2048 ist komplett in JS geschrieben. Es kommt auf die Art des Spieles an.
tsseh schrieb:
spiele sind sowas wie WoW, The Elder Scrolls, .
Der eine Beschreit nun wider das kleinste, der andre schießt mit Kanonen auf Spatzen.
Kein Flash, kein Java, dafür wegGL:
Der Hobbit: Die Schlacht der Fünf Heere
Da auf Schlachtfeld klicken.


tsseh schrieb:
wo wir gerade dabei sind, kann mir mal jemand erklären warum man Minecraft spielt? das soll ein spiel sein?
Oha, Heißes Eisen, las das blos niemanden auf Gronkh.de hören, der hat schließlich 2000 Folgen davon abgefilmt.
Bei sowas ist es wie mit der Musik, der ein hört nur heavy Mörtel, der andre nur Ballerblöd 6 Musik.

Meine Wenigkeit spielt fast nur Horror. Am besten in der Begleitung von mehreren weiblichen Personen:grin:, die kringeln sich dann immer um einen:orange: *harrrrrr*.
Ach waren das noch Zeiten, aus dem alter bin ich raus.


Apropos Spiele, wie wäre es mit einer Portierung von Litte Fighter 2 nach Browser. Da lässt sich ein gutes Multiplayer Game draus basteln via Websocket.
Problem sind die Sprites, jede Bewegung ist ein Bild, das müsste man irgend wie aus der Bitmap herausrechen z.B Alpha Channel.
badcolors.png
Die Grünen Gitter sind im Original auch nicht da.
Bei 20 Charakteren wird das noch gehen in JS, aber bei 200 auf in einen Level oha. Na gut Webworker machst möglich. Was ich allerdings nicht weiß wie programmiert man eine KI, sprich
wann macht wer welchen Angriff, Kollisionsabfrage in JS auch bösartiges Thema bei 200 Chars. Manchmal stehen auch 2 auf der Selben stelle was ist dann?? usw.


=tsseh schrieb:
außerdem gibt es keinen grund, aus dem man z.B document.write nicht mehr verwenden sollte. oder nenne DU mir einen.
mir ist da soeben was eingefallen. document.write funktioniert nicht in XHTML, da geht nur DOM manipulation.
 
Zuletzt bearbeitet:
Zurück
Oben