HighDots Forums  

RegExp.test != /exp/.test

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss RegExp.test != /exp/.test in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Daniel Kirsch
 
Posts: n/a

Default RegExp.test != /exp/.test - 07-12-2004 , 09:51 AM






[Mozilla only]

Servus,
habe hier gerade ein kleines Verständnisproblem. Ich möchte via RegExp
auf einen Datei-Pfad prüfen. "reisekoffergefühllos" (i) spielt keine Rolle:

var templDir = "D:\\Ida\\undsoweiter\\";
var dir = "D:\\Ida";
var d = new RegExp(dir,"i");
alert(d.test(templDir));
alert(/D:\\Ida/.test(templDir));

Mein erstes alert liefert false, was ich nicht verstehe. Das zweite
liefert wie erwartet true.

Kann mir jemand erklären warum Variante 1 nicht funktioniert und wie es
funktionabel wäre?

Grüße und Danke
Daniel

Reply With Quote
  #2  
Old   
Martin Honnen
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-12-2004 , 09:58 AM








Daniel Kirsch wrote:


Quote:
var templDir = "D:\\Ida\\undsoweiter\\";
var dir = "D:\\Ida";
var d = new RegExp(dir,"i");
Schau dir mal
d.toString()
an, das sieht so aus:
/D:\Ida/i

Quote:
alert(/D:\\Ida/.test(templDir));
Dein funktionierendes Pattern aber so
/D:\\Ida/
das Problem ist also, das \ sowohl in Strings als auch in regulaeren
Ausdruecken als Escapezeichen verwendet wird, so dass man bei Verwendung
von new RegExp(string) darauf achten muss, dass man \ verdoppelt:
var dir = "D:\\\\Ida";

--

Martin Honnen
http://JavaScript.FAQTs.com/



Reply With Quote
  #3  
Old   
Daniel Kirsch
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-12-2004 , 10:02 AM



Daniel Kirsch wrote:
Quote:
alert(/D:\\Ida/.test(templDir));
^^
gemeint war natürlich:
alert(/D:\\Ida/i.test(templDir));


Reply With Quote
  #4  
Old   
Daniel Kirsch
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-12-2004 , 10:36 AM



Martin Honnen wrote:
Quote:
das Problem ist also, das \ sowohl in Strings als auch in regulaeren
Ausdruecken als Escapezeichen verwendet wird, so dass man bei Verwendung
von new RegExp(string) darauf achten muss, dass man \ verdoppelt:
var dir = "D:\\\\Ida";
Autsch. Ja.


Reply With Quote
  #5  
Old   
Daniel Kirsch
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-12-2004 , 11:22 AM



Martin Honnen wrote:
Quote:
das Problem ist also, das \ sowohl in Strings als auch in regulaeren
Ausdruecken als Escapezeichen verwendet wird, so dass man bei Verwendung
von new RegExp(string) darauf achten muss, dass man \ verdoppelt:
var dir = "D:\\\\Ida";
Fällt Dir was Kürzeres als

alert(new RegExp(dir.replace(/\\/g,"\\\\"),"i").test(templDir));

ein?

Grüße
Daniel


Reply With Quote
  #6  
Old   
Dietmar Meier
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-12-2004 , 11:29 AM



Daniel Kirsch <Iwillnotread_daniel (AT) gmx (DOT) de> typed:

Quote:
alert(new RegExp(dir.replace(/\\/g,"\\\\"),"i").test(templDir));
Fünf Zeichen kürzer :-) und vielleicht etwas performanter wäre:
alert(templDir.toLowerCase().indexOf(dir.toLowerCa se())>-1);

ciao, dhgm



Reply With Quote
  #7  
Old   
Daniel Kirsch
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-13-2004 , 03:39 AM



Dietmar Meier wrote:
Quote:
Fünf Zeichen kürzer :-) und vielleicht etwas performanter wäre:
alert(templDir.toLowerCase().indexOf(dir.toLowerCa se())>-1);
Das habe ich nun davon das ich mir immer Deine RegEx-Zaubereien
reinziehe: Werde mit meinen eigenen Waffen geschlagen :-)
Und ja, das ist Performanter, auch wenn die Differenz in diesem Fall
keine Rolle spielt.

Danke und Grüße
Daniel


Reply With Quote
  #8  
Old   
peter seliger
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-13-2004 , 04:59 AM



gruss Dietmar, hallo Daniel,


Quote:
Dietmar Meier schrieb:
...
Fünf Zeichen kürzer :-) und vielleicht etwas performanter wäre:
alert(templDir.toLowerCase().indexOf(dir.toLowerCa se())>-1);
breiter angelegt, aber auf dauer sehr nuetzlich waere:

String.prototype.toRegExpString = function() { // does not work in netscape 4;
return this.replace(/([\^\$\.\*\+\?\=\!\:\|\\\/\(\)\[\]\{\}])/g,"\\$1");
};

test:

var templDir = "D:\\Ida\\undsoweiter\\";
var dir = "D:\\Ida";
var d = new RegExp(dir.toRegExpString(),"i");
alert(d.test(templDir)); // true
alert(/D:\\Ida/.test(templDir)); // true


so long - peterS. - pseliger (AT) gmx (DOT) net


Reply With Quote
  #9  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-13-2004 , 02:23 PM



peter seliger wrote:
Quote:
gruss Dietmar, hallo Daniel,
Wir lesen hier alle mit.

Quote:
Dietmar Meier schrieb:
...
Fünf Zeichen kürzer :-) und vielleicht etwas performanter wäre:
alert(templDir.toLowerCase().indexOf(dir.toLowerCa se())>-1);

breiter angelegt, aber auf dauer sehr nuetzlich waere:
Das mag ich bedreifeln. Nicht immer will man alle Spezialzeichen
als Literale haben. Dass es für dieses Problem keinen allgemeinen
Lösungsalgorithmus gibt, wurde hier aber IIRC schonmal erwähnt.

Quote:
String.prototype.toRegExpString = function() { // does not work in netscape 4;
return this.replace(/([\^\$\.\*\+\?\=\!\:\|\\\/\(\)\[\]\{\}])/g,"\\$1");
};
Weshalb sollte das in Netscape 4 nicht funktionieren?


PointedEars


Reply With Quote
  #10  
Old   
peter seliger
 
Posts: n/a

Default Re: RegExp.test != /exp/.test - 07-14-2004 , 05:47 AM



Thomas 'PointedEars' Lahn wrote:


Gruss Thomas,

Quote:
Das mag ich bedreifeln. Nicht immer will man alle Spezialzeichen
als Literale haben. Dass es für dieses Problem keinen allgemeinen
Lösungsalgorithmus gibt, wurde hier aber IIRC schonmal erwähnt.
natuerlich hast Du recht, deshalb will ich korrekt und spezifischer
formulieren:

die methode "toRegExpString" kann genau in den faellen hilfreich
sein, in denen man literale, welche erst zur laufzeit bekannt sind,
unter zuhilfenahme von regular expressions suchen muss;

Quote:
Weshalb sollte das in Netscape 4 nicht funktionieren?
diese methode ist beim testen auf netscape 4 durchgefallen, und
dabei sah es so aus, als ob referenzen auf matches im zweiten
argument der string-methode "replace" schlichtweg nicht bekannt
sind;


Quote:
peter seliger wrote:
gruss Dietmar, hallo Daniel,

Wir lesen hier alle mit.

dessen bin ich mir bewusst - so long - peterS. - pseliger (AT) gmx (DOT) net


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.