Reguärer Ausdruck?
ingo b
- javascript
Hallo,
ich möchte bei den String
P(200;300);
zu
P(200,300);
umwandeln und versuche es so:
curLine = curLine.replace(/;\B/g,",");
er wandelt aber alle ; in , um, auch das hinterste, was er aber nicht soll. Ebenfalls versucht habe ich:
curLine = curLine.replace(/;\B/g,",");
Was aber auch nicht ging. Kann es sein, das das ; gar nicht am Wortende steht? Wie ist denn ein Wortende definiert? Ein Leerzeichen, ein Whitespace?
Es wäre schön, wenn mir jemand den korrektenRegulüren Ausdruck nennen könnte.
Hi,
Was aber auch nicht ging. Kann es sein, das das ; gar nicht am Wortende steht?
\b wäre die Wortgrenze. \B heißt genau das Gegenteil, eine Nicht-Wortgrenze.
Wie ist denn ein Wortende definiert? Ein Leerzeichen, ein Whitespace?
Nein. \b und \B sind nicht als ein (oder mehrere Zeichen) definiert. Sie sind als Positionen definiert. Und zwar \b als die Position zwischen einem Wort-Zeichen und einem Nicht-Wortzeichen. Und \B als Position zwischen 2 Wortzeichen (ob es auch die Position zwischen 2 Nicht-Wort-Zeichen matcht, weiß ich grad nicht).
Als Wortzeichen gelten in Javascript IIRC alle alphanumerischen Zeichen und der Unterstrich, als Nicht-Wortzeichen alle anderen.
Wie alphanumerisch in Javascript genau definiert ist (sprich: nur A-Za-z oder alle Unicode-Zeichen, die Buchstaben darstellen; analog für Ziffern, die es ja auch in ASCII und in anderen Varianten gibt), weiß ich auch grad nicht.
cu,
Andreas
gudn tach!
ich habe den betreff zu perl geaendert, weil mir die regexp-engine von js gruselig ist.
Wie ist denn ein Wortende definiert? Ein Leerzeichen, ein Whitespace?
Nein. \b und \B sind nicht als ein (oder mehrere Zeichen) definiert. Sie sind als Positionen definiert. Und zwar \b als die Position zwischen einem Wort-Zeichen und einem Nicht-Wortzeichen. Und \B als Position zwischen 2 Wortzeichen (ob es auch die Position zwischen 2 Nicht-Wort-Zeichen matcht, weiß ich grad nicht).
ja, \B ist die (logische) umkehrung von \b.
\b matcht die grenze zwischen \w und \W (oder stringende) oder \W (oder stringanfang) und \w.
\B matcht die grenze zwischen \w und \w oder \W (oder stringanfang) und \W (oder stringende).
ich denke, man kann die beiden auch uebersetzen mit
\b = (?<=\w)(?!\w)|(?<!\w)(?=\w)
\B = (?<!\w)(?!\w)|(?<=\w)(?=\w)
wobei zu beachten ist, dass (?<!\W) ("davor kein nicht-wortzeichen") nicht dasselbe ist wie (?<=\w) ("davor ein wortzeichen") usw.
so liefert z.b. /\B/ auch beim leeren string '' einen treffer.
und deswegen wuerde auch
$_='P(200;300);';
s/;\B/,/g;
print;
ergeben:
P(200;300),
in javascript bei mir (mozilla 1.7.13, win2k) uebrigens auch:
javascript:curLine="P(200;300);"; curLine = curLine.replace(/;\B/g,","); alert(curLine);
wuerde man ein kleines "b" waehlen, wuerde das erste semikolon ersetzt, das letzte (am stringende stehende) jedoch nicht.
prost
seth
hi,
curLine = curLine.replace(/;\B/g,",");
er wandelt aber alle ; in , um, auch das hinterste, was er aber nicht soll.
Und den Modifier g hast du dabei bewusst eingesetzt ...?
gruß,
wahsaga