it-swarm.com.de

Wie kann ich mit regex alle Satzzeichen in JavaScript entfernen?

Wenn ich eine Zeichenfolge mit einem beliebigen Typ nicht-alphanumerischer Zeichen habe: 

"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"

Wie würde ich eine JavaScript-Version ohne Interpunktion erhalten?

"This is an example of a string with punctuation"
131
Quentin Fisk

Wenn Sie bestimmte Satzzeichen aus einer Zeichenfolge entfernen möchten, empfiehlt es sich, am besten explizit genau das zu entfernen, was Sie möchten

replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"")

Wenn Sie die obigen Schritte ausführen, wird die Zeichenfolge nicht zurückgegeben, wie Sie sie angegeben haben. Wenn Sie zusätzliche Leerzeichen entfernen möchten, die durch das Entfernen von verrückter Satzzeichen übrig geblieben sind, möchten Sie so etwas wie tun

replace(/\s{2,}/g," ");

Mein vollständiges Beispiel:

var s = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var punctuationless = s.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
var finalString = punctuationless.replace(/\s{2,}/g," ");

Ergebnisse des laufenden Codes in der Firebug-Konsole:

alt text

180
Mike Grace
str = str.replace(/[^\w\s]|_/g, "")
         .replace(/\s+/g, " ");

Entfernt alles außer alphanumerischen Zeichen und Leerzeichen und reduziert dann mehrere nebeneinander liegende Zeichen auf einzelne Leerzeichen.

Ausführliche Erklärung:

  1. \w ist eine beliebige Ziffer, ein Buchstabe oder ein Unterstrich.
  2. \s ist ein beliebiger Whitespace.
  3. [^\w\s] ist alles, was keine Ziffer, kein Buchstabe, Leerzeichen oder Unterstrich ist.
  4. [^\w\s]|_ ist derselbe wie # 3, jedoch werden die Unterstriche wieder eingefügt.
102
John Kugelman

Hier sind die Standard-Satzzeichen für US-ASCII: !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~

Bei Unicode-Interpunktionszeichen (z. B. geschwungene Anführungszeichen, Bindestriche usw.) können Sie ganz einfach bestimmte Blockbereiche abgleichen. Der Block General Interpunktion ist \u2000-\u206F, und der Block Supplemental Interpunktion ist \u2E00-\u2E7F.

Zusammengesetzt und richtig entkommen erhalten Sie das folgende RegExp:

/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>[email protected]\[\]^_`{|}~]/

Das sollte so ziemlich jeder Interpunktion entsprechen, auf die Sie stoßen. Um die ursprüngliche Frage zu beantworten:

var punctRE = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>[email protected]\[\]^_`{|}~]/g;
var spaceRE = /\s+/g;
var str = "This, -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
str.replace(punctRE, '').replace(spaceRE, ' ');

>> "This is an example of a string with punctuation"

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

63
Joseph

/ [^ A-Za-z0-9\s]/g sollte mit allen Satzzeichen übereinstimmen, aber die Leerzeichen beibehalten . Sie können .replace(/\s{2,}/g, " ") verwenden, um bei Bedarf zusätzliche Leerzeichen zu ersetzen. Sie können den Regex in http://rubular.com/ testen.

.replace(/[^A-Za-z0-9\s]/g,"").replace(/\s{2,}/g, " ")

Update: Funktioniert nur, wenn der Eingang ANSI-Englisch ist.

10
adnan2nd

Ich werde es einfach für andere hier stellen.

Finde alle Interpunktionszeichen für alle Sprachen:

Konstruiert aus der Unicode-Interpunktionskategorie und fügte einige allgemeine Tastatursymbole hinzu, wie $ und Klammern und \-=_

http://www.fileformat.info/info/unicode/category/Po/list.htm

grundlegend ersetzen:

".test'da, te\"xt".replace(/[\-=_!"#%&'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g,"")
"testda text"

\ s als Leerzeichen hinzugefügt

".da'fla, te\"te".split(/[\s\-=_!"#%&'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g)

fügte ^ hinzu, um patternt umzukehren, um nicht mit der Interpunktion, sondern mit den Wörtern übereinzustimmen

".test';the, te\"xt".match(/[^\s\-=_!"#%&'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g)

für eine Sprache wie Hebräisch vielleicht, um das einzelne und das doppelte Zitat zu entfernen und mehr darüber nachzudenken.

mit diesem Skript:

schritt 1: Wählen Sie in Firefox Holding Control eine Spalte mit U + 1234-Nummern aus und kopieren Sie sie. Kopieren Sie nicht U + 12456, da diese die englischen ersetzen

schritt 2 (ich habe es in chrom gemacht) finde ein textfeld und füge es ein, dann rechtsklicke und klicke auf inspizieren. dann können Sie mit $ 0 auf das ausgewählte Element zugreifen.

var x=$0.value
var z=x.replace(/U\+/g,"").split(/[\r\n]+/).map(function(a){return parseInt(a,16)})
var ret=[];z.forEach(function(a,k){if(z[k-1]===a-1 && z[k+1]===a+1) { if(ret[ret.length-1]!="-")ret.Push("-");} else {  var c=a.toString(16); var prefix=c.length<3?"\\u0000":c.length<5?"\\u0000":"\\u000000"; var uu=prefix.substring(0,prefix.length-c.length)+c; ret.Push(c.length<3?String.fromCharCode(a):uu)}});ret.join("")

schritt 3 kopiert die ersten Buchstaben des ASCII als separate Zeichen nicht, da jemand einzelne Zeichen hinzufügen oder entfernen kann

8
Shimon Doodkin

Ich bin auf das gleiche Problem gestoßen, diese Lösung hat den Trick gelöst und war sehr lesbar: 

var sentence = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var newSen = sentence.match(/[^_\W]+/g).join(' ');
console.log(newSen);

Ergebnis: 

"This is an example of a string with punctuation"

Der Trick bestand darin, ein negiertes Set zu erstellen. Dies bedeutet, dass es mit allem übereinstimmt, was nicht innerhalb der Menge ist, d. H. [^abc] - nicht a, b oder c.

\W ist ein beliebiges Nicht-Wort, daher negiert [^\W]+ alles, was kein Wort char ist. 

Durch das Hinzufügen von _ (Unterstrich) können Sie dies ebenfalls negieren. 

Lassen Sie es global anwenden /g, dann können Sie eine beliebige Zeichenfolge durchlaufen lassen und die Interpunktion löschen: 

/[^_\W]+/g

Schön und sauber ;)

7
jacobedawson

In einer Unicode-kompatiblen Sprache ist die Unicode Interpunktion character-Eigenschaft \p{P} -, die Sie normalerweise \pP abkürzen und manchmal aus Gründen der Lesbarkeit auf \p{Punctuation} erweitern können. 

Verwenden Sie eine Perl-kompatible Bibliothek für reguläre Ausdrücke?

5
tchrist

Für en-US (amerikanisches Englisch) sollte dies ausreichen:

"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation".replace( /[^a-zA-Z ]/g, '').replace( /\s\s+/g, ' ' )

Wenn Sie UTF-8 und Zeichen wie Chinesisch/Russisch und alle unterstützen, werden diese ebenfalls ersetzt. Sie müssen also genau angeben, was Sie möchten.

5
meder omuraliev

Wenn Sie Satzzeichen aus beliebigen Zeichenfolgen entfernen möchten, sollten Sie die P Unicode-Klasse verwenden.

Da Klassen jedoch nicht in JavaScript RegEx akzeptiert werden, können Sie dieses RegEx versuchen, das mit der Interpunktion übereinstimmt. Es stimmt mit den folgenden Kategorien überein: Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So AllgemeinAuswertung ErgänzendUnterzeichnung CJKSymbolsAndPunctuation CuneiformNumbersAndPunctuation.

Ich habe es mit diesem Online-Tool erstellt, das reguläre Ausdrücke speziell für JavaScript generiert

var punctuationRegEx = /[!-/:[email protected][-`{-~¡-©«-¬®-±´¶-¸»¿×÷˂-˅˒-˟˥-˫˭˯-˿͵;΄-΅·϶҂՚-՟։-֊־׀׃׆׳-״؆-؏؛؞-؟٪-٭۔۩۽-۾܀-܍߶-߹।-॥॰৲-৳৺૱୰௳-௺౿ೱ-ೲ൹෴฿๏๚-๛༁-༗༚-༟༴༶༸༺-༽྅྾-࿅࿇-࿌࿎-࿔၊-၏႞-႟჻፠-፨᎐-᎙᙭-᙮᚛-᚜᛫-᛭᜵-᜶។-៖៘-៛᠀-᠊᥀᥄-᥅᧞-᧿᨞-᨟᭚-᭪᭴-᭼᰻-᰿᱾-᱿᾽᾿-῁῍-῏῝-῟῭-`´-῾\u2000-\u206e⁺-⁾₊-₎₠-₵℀-℁℃-℆℈-℉℔№-℘℞-℣℥℧℩℮℺-℻⅀-⅄⅊-⅍⅏←-⏧␀-␦⑀-⑊⒜-ⓩ─-⚝⚠-⚼⛀-⛃✁-✄✆-✉✌-✧✩-❋❍❏-❒❖❘-❞❡-❵➔➘-➯➱-➾⟀-⟊⟌⟐-⭌⭐-⭔⳥-⳪⳹-⳼⳾-⳿⸀-\u2e7e⺀-⺙⺛-⻳⼀-⿕⿰-⿻\u3000-〿゛-゜゠・㆐-㆑㆖-㆟㇀-㇣㈀-㈞㈪-㉃㉐㉠-㉿㊊-㊰㋀-㋾㌀-㏿䷀-䷿꒐-꓆꘍-꘏꙳꙾꜀-꜖꜠-꜡꞉-꞊꠨-꠫꡴-꡷꣎-꣏꤮-꤯꥟꩜-꩟﬩﴾-﴿﷼-﷽︐-︙︰-﹒﹔-﹦﹨-﹫!-/:-@[-`{-・¢-₩│-○-�]|\ud800[\udd00-\udd02\udd37-\udd3f\udd79-\udd89\udd90-\udd9b\uddd0-\uddfc\udf9f\udfd0]|\ud802[\udd1f\udd3f\ude50-\ude58]|\ud809[\udc00-\udc7e]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83-\udd84\udd8c-\udda9\uddae-\udddd\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83c[\udc00-\udc2b\udc30-\udc93]/g;
var string = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var newString = string.replace(punctuationRegEx, '').replace(/(\s){2,}/g, '$1');
console.log(newString)

4
Salvatore

Laut Wikipedia's Liste der Interpunktionen musste ich den folgenden regulären Ausdruck erstellen, der Interpunktionen erkennt:

[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]

2
Tushar Goswami

wenn Sie lodash verwenden 

_.words('This, is : my - test,line:').join(' ')

Dieses Beispiel 

_.words('"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"').join(' ')
2
Pankaj Avhad

Wenn Sie nur Buchstaben und Leerzeichen beibehalten möchten, können Sie Folgendes tun:

str.replace(/[^a-zA-Z ]+/g, '').replace('/ {2,}/',' ')
1
codaddict

Es hängt davon ab, was Sie zurückgeben möchten. Ich habe das kürzlich benutzt:

return text.match(/[a-z]/i);
0
Amanda Koster