Ersetzen Sie alle nicht Alpha-Numerischen Zeichen, Neue Zeilen und mehrere Leerzeichen mit einem Leerzeichen
Ich bin auf der Suche nach einem ordentlichen RegEx Lösung zu ersetzen
- Alle nicht Alpha-Numerischen Zeichen
- Alle Zeilenumbrüche
- Alle mehrere Instanzen von white-space -
Mit einem einzigen Raum
Für diejenigen, die spielen zu Hause (der folgende Code funktioniert,)
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Mein denken ist RegEx ist vermutlich leistungsfähig genug, um dies zu erreichen in einer Anweisung. Die Komponenten die ich denke-id benötigen, sind
[^a-z0-9]
- zum Entfernen von nicht Alpha-Numerischen Zeichen\s+
- Spiel eine Sammlung von Leerzeichen\r?\n|\r
- match alle neuen Linie/gmi
- global, multi-line -, groß-und Kleinschreibung
Aber ich kann nicht scheinen, um Stil der regex in der richtigen Weise (das folgende funktioniert nicht)
text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");
Eingang
234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5
Gewünschte Ausgabe
234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5
- Wie genau funktioniert der Versuch nicht funktioniert? Was geht falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sich bewusst sein, dass
\W
Blätter der Unterstrich. Eine kurze Entsprechung für[^a-zA-Z0-9]
wäre[\W_]
\W
ist die negation der Kurzform\w
für[A-Za-z0-9_]
Wort-Zeichen (einschließlich Unterstriche)Beispiel bei regex101.com
\W
wird auch erkennen, nicht-lateinische Zeichen als nicht-Wort-Zeichen.Jonny 5 mich zu schlagen. Ich würde vorschlagen, die
\W+
ohne die\s
wie intext.replace(/\W+/g, " ")
. Dies deckt weißen Raum als gut.\W+
, nicht[W+]
Gut, frohes neues Jahr alle!text.replace
:p&
und-
. Irgendwelche Tipps?Seit
[^a-z0-9]
Charakter-Klasse enthält alles, was nicht alnum, es enthält weiße Zeichen auch!Naja, ich denke, Sie müssen nur fügen Sie ein Quantifizierer auf jedes Muster. Auch die carriage-return-Sache ist ein wenig komisch:
Bearbeiten Die
\s
Sache entspricht\r
und\n
zu.Einer sah einen anderen post, der hatte auch diakritische Zeichen, das ist toll,
s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")
Dies ist eine alte post von mir, die akzeptierten Antworten sind gut für die meisten Teil. Allerdings habe ich beschlossen, einen benchmark für jede Lösung-und ein anderer offensichtlich eine (nur zum Spaß). Ich fragte mich, ob es einen Unterschied zwischen dem regex-Muster auf verschiedenen Browsern mit verschiedenen großen strings.
Also grundsätzlich habe ich verwendet jsPerf auf
Den regex-Muster, die ich getestet habe waren
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
Ich lud Sie mit einer string-Länge von zufälligen Zeichen
Beispiel javascript verwendet, ich
var newstr = str.replace(/[\W_]+/g," ");
Jeder Lauf Bestand aus 50 oder mehr sample auf jeden regex, und ich Sie laufen 5 mal auf jedem browser.
Rennen können unsere Pferde!
Ergebnisse
Wahrheit bekannt ist, Regex in beiden Browsern (unter Berücksichtigung der Abweichung) waren fast nicht zu unterscheiden, aber ich denke, wenn es laufen sogar noch mal die Ergebnisse, würde ein wenig mehr Klarheit (aber nicht viel).
Theoretische Skalierung für 1 Charakter
Ich würde nicht zu viel in diese Ergebnisse als dies ist nicht wirklich eine signifikante Unterschiede, alle können wir wirklich sagen, ist edge langsamer ist 😮 . Darüber hinaus, war ich super langweilig.
Können Sie sowieso laufen, der benchmark für Ihre self.
Jsperf Benchmark hier