Ich suche nach einer netten RegEx- Lösung, die ich ersetzen kann
- Alle nicht alphanumerischen Zeichen
- Alle NewLines
- Alle mehrfachen Instanzen von Leerzeichen
Mit einem einzigen Leerzeichen
Für diejenigen, die zu Hause spielen ( das Folgende funktioniert )
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Meiner Meinung nach ist RegEx wahrscheinlich stark genug, um dies in einer Aussage zu erreichen. Die Komponenten, von denen ich denke, dass sie benötigt werden, sind
[^a-z0-9]
- um nicht alphanumerische Zeichen zu entfernen\s+
- mit allen Sammlungen von Räumen übereinstimmen\r?\n|\r
- Alle neuen Zeilen abgleichen/gmi
- global, mehrzeilig, ohne Berücksichtigung der Groß- und Kleinschreibung
Allerdings kann ich den Regex nicht richtig stylen ( 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
javascript
regex
replace
alphanumeric
Die allgemeine
quelle
quelle
Antworten:
Seien Sie sich bewusst, dass
\W
der Unterstrich bleibt . Ein kurzes Äquivalent für[^a-zA-Z0-9]
wäre[\W_]
\W
ist die Negation der Abkürzung\w
für[A-Za-z0-9_]
Wortzeichen (einschließlich des Unterstrichs)Beispiel bei regex101.com
quelle
\W
auch nicht-lateinische Zeichen als Nicht-Wort-Zeichen erkannt werden.Jonny 5 hat mich geschlagen. Ich würde vorschlagen, das
\W+
ohne das\s
wie in zu verwendentext.replace(/\W+/g, " ")
. Dies gilt auch für Leerzeichen.quelle
\W+
nicht alles Gute für ein gutes[W+]
neues Jahr sein!&
und-
. Irgendwelche Tipps?Da
[^a-z0-9]
die Zeichenklasse alles enthält, was nicht Alnum ist, enthält sie auch weiße Zeichen!quelle
Nun, ich denke, Sie müssen jedem Muster nur einen Quantifizierer hinzufügen. Auch die Wagenrücklaufsache ist ein bisschen lustig:
bearbeiten Das
\s
Ding passt\r
und\n
auch.quelle
A sah einen anderen Beitrag, der auch diakritische Zeichen hatte, was großartig ist
s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")
quelle
Dies ist ein alter Beitrag von mir, die akzeptierten Antworten sind größtenteils gut. Ich entschied mich jedoch, jede Lösung und eine andere offensichtliche zu vergleichen (nur zum Spaß). Ich fragte mich, ob es einen Unterschied zwischen den Regex-Mustern in verschiedenen Browsern mit unterschiedlich großen Zeichenfolgen gab.
Also im Grunde verwendet i jsPerf auf
Die Regex-Muster, die ich getestet habe, waren
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
Ich habe sie mit einer Stringlänge von zufälligen Zeichen geladen
Beispiel Javascript, das ich verwendet habe
var newstr = str.replace(/[\W_]+/g," ");
Jeder Lauf bestand aus 50 oder mehr Beispielen auf jeder Regex, und ich habe sie 5 Mal in jedem Browser ausgeführt.
Lass uns unsere Pferde rennen!
Ergebnisse
Um ehrlich zu sein, Regex in beiden Browsern (unter Berücksichtigung der Abweichung) war fast nicht zu unterscheiden, aber ich denke, wenn es noch öfter ausgeführt wird, werden die Ergebnisse etwas klarer (aber nicht viel).
Theoretische Skalierung für 1 Zeichen
Ich würde nicht zu viel auf diese Ergebnisse eingehen, da dies keine signifikanten Unterschiede sind. Wir können nur sagen, dass die Kante langsamer ist: o. Außerdem war ich super gelangweilt.
Auf jeden Fall können Sie den Benchmark für sich selbst durchführen.
Jsperf Benchmark hier
quelle
Gehen Sie wie folgt vor, um durch Bindestriche zu ersetzen:
quelle