Comment puis-je supprimer toute ponctuation d'une chaîne en JavaScript en utilisant regex?

si j'ai une chaîne avec n'importe quel type de caractère non alphanumérique:

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

comment en obtenir une version sans ponctuation en JavaScript:

"This is an example of a string with punctuation"
117
demandé sur hichris123 2010-12-01 22:58:27

13 réponses

si vous voulez supprimer la ponctuation spécifique d'une chaîne, il sera probablement préférable de supprimer explicitement exactement ce que vous voulez comme

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

faire ce qui précède ne renvoie toujours pas la chaîne telle que vous l'avez spécifiée. Si vous voulez supprimer tous les espaces supplémentaires qui ont été laissés de supprimer ponctuation folle, alors vous allez vouloir faire quelque chose comme

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

mon exemple complet:

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

résultats du code de fonctionnement dans la console firebug:

alt text

166
répondu Mike Grace 2016-01-15 14:42:53
str = str.replace(/[^\w\s]|_/g, "")
         .replace(/\s+/g, " ");

supprime tout sauf les caractères alphanumériques et les espaces, puis réduit plusieurs caractères adjacents à des espaces simples.

explication détaillée:

  1. \w est un chiffre, une lettre ou un trait de soulignement.
  2. \s est n'importe quel espace.
  3. [^\w\s] est tout ce qui n'est pas un chiffre, une lettre, un espace ou un trait de soulignement.
  4. [^\w\s]|_ est le même que #3 sauf avec les underscores ajoutés à nouveau.
93
répondu John Kugelman 2010-12-01 20:11:38

Voici les caractères de ponctuation standard pour US-ASCII: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

pour la ponctuation Unicode (comme les guillemets bouclés, em-dashes, etc.), vous pouvez facilement faire correspondre sur les plages de blocs spécifiques. Le bloc Ponctuation générale est \u2000-\u206F , et le bloc Ponctuation supplémentaire est \u2E00-\u2E7F .

mis ensemble, et correctement échappé, vous obtenez le RegExp suivant:

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

qui devrait correspondre à peu près à toute Ponctuation que vous rencontrez. Donc, pour répondre à la question originale:

var punctRE = /[\u2000-\u206F\u2E00-\u2E7F\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/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 source: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix

Unicode source: http://kourge.net/projects/regexp-unicode-block

54
répondu Joseph 2015-08-03 04:02:56

/[^A-Za-z0-9\S] / g devrait correspondre à toute la ponctuation, mais garder les espaces. Ainsi, vous pouvez utiliser .replace(/\s{2,}/g, " ") pour remplacer les espaces supplémentaires si vous avez besoin de le faire. Vous pouvez tester le regex dans http://rubular.com /

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

mise à Jour : ne fonctionne que si l'entrée est ANSI anglais.

9
répondu adnan2nd 2017-11-12 07:08:53

je vais le mettre ici pour les autres.

correspondent à toutes les ponctuations pour toutes les langues:

Construit à partir de la catégorie de ponctuation Unicode et ajouté quelques symboles communs de clavier comme $ et les crochets et \-=_

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

remplacer:

".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"

ajouté \s comme espace

".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)

ajouté ^ pour inverser patternt pour correspondre pas ponctuation, mais les mots eux-mêmes

".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)

pour une langue comme l'Hébreu peut-être pour supprimer "' la simple et la double citation. et ne plus penser à elle.

utilisant ce script:

étape 1: Sélectionnez dans Firefox holding control une colonne de numéros U+1234 et copiez-la, ne copiez pas U+12456 ils remplacent l'anglais

étape 2 (Je l'ai fait dans chrome)trouver un peu de textarea et le coller dans elle puis rightclick et cliquez sur Inspecter. ensuite, vous pouvez accéder à l'élément sélectionné avec 0$.

var x="151930920".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("")

étape 3 copié sur les premières lettres les caractères ascii comme caractères séparés ne varie pas parce que quelqu'un pourrait ajouter ou supprimer des caractères individuels

7
répondu Shimon Doodkin 2015-08-03 04:07:09

j'ai couru à travers la même question, Cette solution a fait l'affaire et était très lisible:

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

résultat:

"This is an example of a string with punctuation"

le truc était de créer un jeu nié . Cela signifie qu'il correspond à tout ce qui n'est pas dans l'ensemble i.e. [^abc] - pas a, b ou c

\W est un non-mot, donc [^\W]+ va nier tout ce qui n'est pas un mot char .

en ajoutant le _ (underscore) vous pouvez nier cela aussi.

faire appliquer globalement /g , alors vous pouvez exécuter n'importe quelle chaîne et effacer la ponctuation:

/[^_\W]+/g

Agréable et propre ;)

6
répondu jacobedawson 2017-04-28 20:48:53

Pour en-US ( anglais Américain ) les chaînes de caractères, cela devrait suffire:

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

soyez conscient que si vous supportez UTF-8 et des caractères comme le chinois/russe et tout, cela les remplacera aussi, donc vous devez vraiment spécifier ce que vous voulez.

5
répondu meder omuraliev 2010-12-01 20:04:10

dans un langage Unicode-aware, le Unicode Ponctuation propriété de caractère est \p{P} - que vous pouvez généralement abrévier \pP et parfois étendre à \p{Punctuation} pour la lisibilité.

utilisez-vous une bibliothèque D'expressions régulières compatible Perl?

5
répondu tchrist 2010-12-01 20:22:10

selon liste de ponctuations de Wikipedia j'ai dû construire le regex suivant qui détecte les ponctuations :

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

2
répondu Tushar Goswami 2017-03-05 19:11:42

si vous voulez supprimer la ponctuation d'une chaîne de caractères, vous devez utiliser la classe P Unicode.

mais, parce que les classes ne sont pas acceptées dans le JavaScript RegEx, vous pouvez essayer ce RegEx qui devrait correspondre à toute la ponctuation. Il correspond aux catégories suivantes: Pc Pd Pe Pf PF Po Ps Sc Sk Sm So Fonctionnationgénérale Fonctionnation supplementaire CJKSymbolsAndPunctuation CuneiformNumbersAndPunctuation.

Je l'ai créé en utilisant cet outil en ligne qui génère des Expressions régulières spécifiquement pour JavaScript. C'est le code pour atteindre votre objectif:

var punctuationRegEx = /[!-/:-@[-`{-~¡-©«-¬®-±´¶-¸»¿×÷˂-˅˒-˟˥-˫˭˯-˿͵;΄-΅·϶҂՚-՟։-֊־׀׃׆׳-״؆-؏؛؞-؟٪-٭۔۩۽-۾܀-܍߶-߹।-॥॰৲-৳৺૱୰௳-௺౿ೱ-ೲ൹෴฿๏๚-๛༁-༗༚-༟༴༶༸༺-༽྅྾-࿅࿇-࿌࿎-࿔၊-၏႞-႟჻፠-፨᎐-᎙᙭-᙮᚛-᚜᛫-᛭᜵-᜶។-៖៘-៛᠀-᠊᥀᥄-᥅᧞-᧿᨞-᨟᭚-᭪᭴-᭼᰻-᰿᱾-᱿᾽᾿-῁῍-῏῝-῟῭-`´-῾\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, '');
console.log(newString)
2
répondu Salvatore 2018-01-22 18:14:18

si vous voulez ne conserver que des alphabets et des espaces, vous pouvez faire:

str.replace(/[^a-zA-Z ]+/g, '').replace('/ {2,}/',' ')
1
répondu codaddict 2010-12-01 20:09:02

si vous utilisez lodash

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

Cet Exemple

_.words('"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"').join(' ')
1
répondu Pankaj Avhad 2017-11-07 22:53:39

Cela dépend de ce que vous essayez de revenir. J'ai utilisé ceci récemment:

return text.match(/[a-z]/i);
0
répondu Amanda Koster 2017-12-06 23:18:50