Wenn ich eine Zeichenfolge mit einem nicht alphanumerischen Zeichen habe:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
Wie würde ich eine Version ohne Interpunktion in JavaScript erhalten:
"This is an example of a string with punctuation"
javascript
regex
Quentin Fisk
quelle
quelle
\s
) durch ein einzelnes Leerzeichen ersetzt. Wenn Sie eine beliebige Anzahl von Leerzeichen auf eins reduzieren möchten, lassen Sie die Obergrenze wie folgt weg :replace(/\s{2,}/g, ' ')
.@+?><[]+
) :replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. Wenn jemand nach einem noch etwas vollständigeren Set sucht.!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Was für mich besser funktioniert, also wäre eine andere Alternative:replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
Entfernt alles außer alphanumerischen Zeichen und Leerzeichen und reduziert dann mehrere benachbarte Zeichen auf einzelne Leerzeichen.
Ausführliche Erklärung:
\w
ist eine beliebige Ziffer, ein Buchstabe oder ein Unterstrich.\s
ist ein Leerzeichen.[^\w\s]
ist alles, was keine Ziffer, kein Buchstabe, kein Leerzeichen oder kein Unterstrich ist.[^\w\s]|_
ist dasselbe wie # 3, außer dass die Unterstriche wieder hinzugefügt werden.quelle
wouldn't
unddon't
Hier sind die Standard-Interpunktionszeichen für US-ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Bei Unicode-Interpunktion (z. B. geschweifte Anführungszeichen, Bindestriche usw.) können Sie bestimmte Blockbereiche problemlos abgleichen. Der allgemeine Interpunktionsblock ist
\u2000-\u206F
und der ergänzende Interpunktionsblock ist\u2E00-\u2E7F
.Zusammengenommen und ordnungsgemäß entkommen, erhalten Sie das folgende RegExp:
Das sollte so ziemlich jeder Interpunktion entsprechen, auf die Sie stoßen. Um die ursprüngliche Frage zu beantworten:
US-ASCII-Quelle: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Unicode-Quelle: http://kourge.net/projects/regexp-unicode-block
quelle
/ [^ A-Za-z0-9 \ s] / g sollte mit allen Satzzeichen übereinstimmen, aber die Leerzeichen behalten. Sie können also
.replace(/\s{2,}/g, " ")
zusätzliche Leerzeichen ersetzen, wenn Sie dies benötigen. Sie können den regulären Ausdruck unter http://rubular.com/ testen.Update : Funktioniert nur, wenn die Eingabe ANSI-Englisch ist.
quelle
Ich bin auf dasselbe Problem gestoßen, diese Lösung hat es geschafft und war sehr gut lesbar:
Ergebnis:
Der Trick bestand darin, eine negierte Menge zu erstellen . Dies bedeutet, dass es mit allem übereinstimmt, was nicht innerhalb der Menge liegt, dh
[^abc]
nicht mit a, b oder c\W
ist ein Nicht-Wort, also[^\W]+
wird alles negiert, was kein Wort char ist .Durch Hinzufügen des _ (Unterstrichs) können Sie dies ebenfalls negieren.
Wenn Sie es global anwenden
/g
, können Sie eine beliebige Zeichenfolge durchlaufen und die Interpunktion löschen:Schön und sauber ;)
quelle
Ich werde es nur für andere hier setzen.
Ordnen Sie alle Satzzeichen für alle Sprachen zu:
Erstellt aus der Unicode-Interpunktionskategorie und fügte einige gebräuchliche Tastatursymbole wie
$
und Klammern und hinzu\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
Grundlegender Ersatz:
\ s als Leerzeichen hinzugefügt
^ hinzugefügt, um das Muster so umzukehren, dass nicht die Interpunktion, sondern die Wörter selbst übereinstimmen
für eine Sprache wie Hebräisch vielleicht, um das einfache und das doppelte Anführungszeichen zu entfernen und mehr darüber nachzudenken.
Verwenden dieses Skripts:
Schritt 1: Wählen Sie in Firefox Holding Control eine Spalte mit U + 1234-Nummern aus und kopieren Sie diese. Kopieren Sie nicht U + 12456, sie ersetzen Englisch
Schritt 2 (ich habe in Chrom) finden Sie einen Textbereich und fügen Sie ihn ein. Klicken Sie dann mit der rechten Maustaste und klicken Sie auf Inspizieren. dann können Sie mit $ 0 auf das ausgewählte Element zugreifen.
Schritt 3 kopierte über die ersten Buchstaben die ASCII als separate Zeichen, nicht Bereiche, da jemand einzelne Zeichen hinzufügen oder entfernen könnte
quelle
In einer Unicode-fähigen Sprache lautet die Unicode- Interpunktion- Zeicheneigenschaft
\p{P}
- die Sie normalerweise zur besseren Lesbarkeit abkürzen\pP
und manchmal erweitern können\p{Punctuation}
.Verwenden Sie eine Perl-kompatible Bibliothek für reguläre Ausdrücke?
quelle
Wenn Sie Interpunktion aus einer Zeichenfolge entfernen möchten, sollten Sie die
P
Unicode-Klasse verwenden.Da Klassen in JavaScript RegEx nicht akzeptiert werden, können Sie diese RegEx ausprobieren, die mit allen Satzzeichen übereinstimmen sollte. Es entspricht den folgenden Kategorien: Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So Allgemeine Interpunktion SupplementalPunctuation CJKSymbolsAndPunctuation CuneiformNumbersAndPunctuation.
Ich habe es mit diesem Online-Tool erstellt , das reguläre Ausdrücke speziell für JavaScript generiert. Das ist der Code, um Ihr Ziel zu erreichen:
quelle
Für en-US-Zeichenfolgen (American English) sollte dies ausreichen:
Beachten Sie, dass wenn Sie UTF-8 und Zeichen wie Chinesisch / Russisch und alle unterstützen, diese ebenfalls ersetzt werden, sodass Sie wirklich angeben müssen, was Sie möchten.
quelle
wenn Sie lodash verwenden
Dieses Beispiel
quelle
Gemäß der Wikipedia-Liste der Interpunktionen musste ich den folgenden regulären Ausdruck erstellen, der Interpunktionen erkennt:
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
quelle
/
(am häufigsten) verwenden, sollte es innerhalb der obigen Zeichenklasse maskiert werden, indem Sie zuvor einen Schrägstrich wie folgt hinzufügen :\/
. So würden Sie es verwenden :"String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. Übrigens sehe ich den Backtick (`) nirgendwo dort, wie kommt es?Wenn Sie nur Alphabete und Leerzeichen beibehalten möchten, haben Sie folgende Möglichkeiten:
quelle
Es hängt davon ab, was Sie zurückgeben möchten. Ich habe das kürzlich benutzt:
quelle