Diese regex zu Streifen Satzzeichen auch falsch macht, das Wort Báenou in Benou
Dem Ziel, diese regex zum entfernen von Satzzeichen:
var myTxt = "Welcome, Visitor: The Royal Kingdom Of Báenou";
myTxt = myTxt.replace(/[^a-zA-Z0-9 ]+/g, '').replace('/{2,}/',' ');
alert(myTxt);
Also der text oben sollte das werden:
Welcome Visitor The Royal Kingdom Of Báenou
Aber stattdessen ist es falsch, fällt die á
im Báenou
zu produzieren dies:
Welcome Visitor The Royal Kingdom Of Benou
Was ist die einfachste änderung, die ich machen könnte, um das regex zu machen, damit es funktioniert wie vorgesehen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist, dass Sie löschen alles, was nicht in eine "whitelist", die Sie definieren, wie alle (nicht-akzentuiert) Buchstaben, zahlen und Leerzeichen und ersetzen Sie es mit einem leeren string.
Da á ist nicht in
[a-z]
ist, es wird als "Interpunktion" und entfernt.Was Sie brauchen, ist, um einen filter für die Dinge, die in einer "blacklist" und proaktiv zu ersetzen diese.
Versuchen ein regex wie diese:
Den
. Sie möchten möglicherweise verwenden Sie einigen umfangreicher Satz von erlaubten Zeichen wie jedes beliebige Unicode-Buchstaben. Aber da JavaScript nicht unterstützt Unicode-Zeichen Eigenschaften, Sie müssen angeben, dass die Bereiche selbst:
á
abgestimmt ist und entfernt werden, da es weder vona
–z
,A
–Z
,0
–9
oderOder verwenden Sie XRegExp mit seinen Unicode-plugin, wo die vorherigen Bereiche entnommen wurden.
Bearbeiten Nachdem Sie Sie gebeten haben, ähnliche Frage bezüglich meiner Lösung entfernen von zu viel Charakter, ich muss zugeben, dass dieser reguläre Ausdruck nicht nur für die Unicode-Buchstaben, aber nicht die Ziffern oder den Raum. Um dies zu beheben, fügen Sie einfach
0-9
am Ende der Charakter-Klasse vor:Vielleicht anstatt zu sagen: "alles, was nicht diese spezifischen Zeichen, loszuwerden", könnte man stattdessen sagen, "nur loszuwerden, der einige bestimmte Figuren"? So etwas wie diese statt (aber mit mehr Satzzeichen):
Im Gegensatz zu den beiden anderen Antworten, würde ich sagen, dass Sie eine Lokalisierung problem und vielleicht sollten verwenden Sie so etwas wie
[^[:alnum:] ]
. Ich bin mir nicht ganz sicher über die syntax, das hier ist mehr eine "Antwort" - Prinzip. Sowieso keine gute regexp-engine soll alle Zeichen mit Akzent entsprechende Gebietsschema und möglicherweise mit langen Zeichen der einen oder anderen Art auch.[:alnum:]
und Freunde sollten locale-aware, aber keiner hält sich an den POSIX standard. POSIX Charakter-Klassen wurden abgelöst durch Unicode-Eigenschaften, aber JavaScript nicht unterstützt diese, entweder. JavaScript ist soll Folgen Sie den ECMA-262-standard, aber das ist ein Durcheinander: blog.stevenlevithan.com/archives/es3-regexes-broken