RegEx
Rainer
- javascript
Hallo,
ich habe ca. 300 Strings zu überprüfen ob in diesen das @ 1x vorhanden ist?
Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
Am besten mit RegEx? Und wie geht das?
Gruß Rainer
Hallo levu!
Auch wenn die regex-losen Lösungen, wie von Struppi und Beat vorzuziehen sind, hat's mich mal gejuckt...
Der Regexp, der mir spontan einfallen würde, wäre /[1]*@[^@]*$/
Wenn Du ihn auch »spontan« getestet hättest, hättest Du festgestellt, dass der Regex nicht matcht. Hier mit Perl:
my @strings = ();
$strings[0] = 'Isch abe gar kein Arobas';
$strings[1] = 'Ich enthalte genau ein @-Zeichen';
$strings[2] = 'Ich enthalte hier ein @ und hier noch ein @-Zeichen';
$strings[3] = 'Ich enthalte ein doppeltes @@ irgendwo in der Mitte';
for (@strings) {
print 'Regex 1: @ gefunden in: ', $_, "\n" if /^[@]*@[^@]*$/;
}
Ausgabe: Gar keine
Dagegen:
my @strings = ();
$strings[0] = 'Isch abe gar kein Arobas';
$strings[1] = 'Ich enthalte genau ein @-Zeichen';
$strings[2] = 'Ich enthalte hier ein @ und hier noch ein @-Zeichen';
$strings[3] = 'Ich enthalte ein doppeltes @@ irgendwo in der Mitte';
for (@strings) {
print 'Regex 2: @ gefunden in: ', $_, "\n" if /@/ and !/(@).*?\1/;
}
Ausgabe:
Regex 2: @ gefunden in: Ich enthalte genau ein @-Zeichen
Allerdings gelingt es mir nicht, einen einzigen Ausdruck aus »if match and not match« zu machen. Da hoffe ich auf die Lösung eines Regexperten (wow, geile Wortkonstruktion, nicht wahr? *g*).
print 'Regex 3: @ gefunden in: ', $_, "\n" if /(?<!@)@(?!@).*?(?!@)/;
Obiges ignoriert zwar den String mit doppelten @, matcht aber beim dritten String ($strings[2])...
Viele Grüße aus Frankfurt/Main,
Patrick
@ ↩︎
Hi,
Der Regexp, der mir spontan einfallen würde, wäre /[1]*@[^@]*$/
Wenn schon, dann /[2]*@[^@]*$/
cu,
Andreas
ich habe ca. 300 Strings zu überprüfen ob in diesen das @ 1x vorhanden ist?
Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
Am besten mit RegEx? Und wie geht das?
wieso am besten? Ein regülarer Ausdruck ist alles andere als performant, mit einem indexOf erreichst du dein Ziel wesentlich schneller.
Struppi.
Hi,
Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
Am besten mit RegEx? Und wie geht das?wieso am besten? Ein regülarer Ausdruck ist alles andere als performant, mit einem indexOf erreichst du dein Ziel wesentlich schneller.
In diesem Falle kann man das clever mit lastIndexOf kombinieren - wenn die beiden gleich sind (und nicht gleich -1), dann enthält der String genau eins.
var test = "blah blubb @ jodel, sülz quassel";
if(test.indexOf("@") != -1 && test.indexOf("@") == test.lastIndexOf("@")) {
alert(test+" enthält genau ein @");
}
else {
alert(test+" enthält kein oder mehr als ein @");
}
MfG ChrisB
ich habe ca. 300 Strings zu überprüfen ob in diesen das @ 1x vorhanden ist?
Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
Am besten mit RegEx? Und wie geht das?
Auch möglich wäre:
var result = test.split(/@/);
if( result.length == 2 ){ ... }
mfg Beat