javascript - regulares - regex
¿Cómo puedo eliminar toda la puntuación de una cadena en JavaScript usando expresiones regulares? (13)
/ [^ A-Za-z0-9 / s] / g debe coincidir con todos los signos de puntuación, pero mantener los espacios. Entonces puede usar .replace(//s{2,}/g, " ")
para reemplazar espacios adicionales si necesita hacerlo. Puedes probar la expresión regular en http://rubular.com/
.replace(/[^A-Za-z0-9/s]/g,"").replace(//s{2,}/g, " ")
Actualización : solo funcionará si la entrada es en inglés ANSI.
Si tengo una cadena con cualquier tipo de carácter no alfanumérico en ella:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
¿Cómo obtendría una versión sin puntuación en JavaScript?
"This is an example of a string with punctuation"
Depende de lo que estás tratando de devolver. Lo usé recientemente:
return text.match(/[a-z]/i);
En un lenguaje con reconocimiento de Unicode, la propiedad del carácter de puntuación Unicode es /p{P}
, que por lo general puede abreviar /pP
y algunas veces se expande a /p{Punctuation}
para facilitar su lectura.
¿Estás usando una biblioteca de expresión regular compatible con Perl?
Estos son los caracteres de puntuación estándar para US-ASCII !"#$%&''()*+,-./:;<=>?@[/]^_`{|}~
Para la puntuación Unicode (como comillas, comillas, etc.), puede coincidir fácilmente en rangos de bloque específicos. El bloque de Puntuación General es /u2000-/u206F
, y el bloque de Puntuación Suplementaria es /u2E00-/u2E7F
.
Juntos, y escapado correctamente, obtienes el siguiente RegExp:
/[/u2000-/u206F/u2E00-/u2E7F//'!"#$%&()*+,/-.//:;<=>?@/[/]^_`{|}~]/
Eso debería coincidir con casi cualquier puntuación que encuentre. Entonces, para responder la pregunta original:
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"
Fuente de US-ASCII: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Fuente Unicode: http://kourge.net/projects/regexp-unicode-block
Lo pondré aquí para otros.
Coincide con todos los caracteres de puntuación para todos los idiomas:
Construido a partir de la categoría de puntuación Unicode y añadido algunos símbolos de teclado comunes como $
y corchetes y /-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
reemplazo básico:
".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"
agregado como espacio
".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)
se agregó ^ para invertir el patrón para que coincida con la puntuación, pero las palabras en sí mismas
".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)
para un lenguaje como el hebreo, tal vez para eliminar "''la comilla simple y la doble, y pensar más en ello.
usando esta secuencia de comandos:
paso 1: selecciona en Firefox manteniendo presionada una columna de números U + 1234 y cópiala, no copies U + 12456 ellos reemplazan el inglés
paso 2 (lo hice en Chrome) encuentra algo de texto y pégalo en él, luego haz clic derecho y haz clic en inspeccionar. entonces puedes acceder al elemento seleccionado con $ 0.
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("")
paso 3 copiado sobre las primeras letras el ascii como caracteres separados no rangos porque alguien podría agregar o eliminar caracteres individuales
Me encontré con el mismo problema, esta solución hizo el truco y fue muy legible:
var sentence = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var newSen = sentence.match(/[^_/W]+/g).join('' '');
console.log(newSen);
Resultado:
"This is an example of a string with punctuation"
El truco fue crear un conjunto negado . Esto significa que coincide con cualquier cosa que no esté dentro del conjunto, es decir [^abc]
- no a, byc
/W
es cualquier palabra, por lo que [^/W]+
negará cualquier cosa que no sea una palabra char .
Al agregar el _ (guión bajo) también puede negar eso.
Haga que se aplique globalmente /g
, luego puede ejecutar cualquier cadena a través de él y borrar la puntuación:
/[^_/W]+/g
Bonito y limpio ;)
Para cadenas en-US (American English) esto debería ser suficiente:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation".replace( /[^a-zA-Z ]/g, '''').replace( //s/s+/g, '' '' )
Tenga en cuenta que si admite UTF-8 y caracteres como chino / ruso y todo, también los reemplazará, por lo que realmente debe especificar lo que desea.
Según la lista de puntuación de Wikipedia, tuve que compilar la siguiente expresión regular que detecta los signos de puntuación:
[/.''''/[/](){}⟨⟩:,،、‒–—―…!.‹›«»‐/-?''''“”''";/⁄·/&*@/•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
Si desea eliminar la puntuación de cualquier cadena, debe usar la clase P
Unicode.
Pero, como las clases no son aceptadas en el RegEx de JavaScript, puede probar este RegEx que debe coincidir con toda la puntuación. Coincide con las siguientes categorías: Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So GeneralPunctuation SupplementalPunctuation CJKSymbolsAndPunctuation CuneiformNumbersAndPunctuation.
Lo creé usando esta herramienta en línea que genera expresiones regulares específicamente para JavaScript. Ese es el código para alcanzar su objetivo:
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, ''$1'');
console.log(newString)
Si desea eliminar la puntuación específica de una cadena, probablemente será mejor eliminar explícitamente exactamente lo que desea como
replace(/[.,//#!$%/^&/*;:{}=/-_`~()]/g,"")
Hacer lo anterior aún no devuelve la cadena como lo ha especificado. Si desea eliminar los espacios adicionales que quedaron de eliminar la puntuación loca, entonces va a querer hacer algo como
replace(//s{2,}/g," ");
Mi ejemplo completo:
var s = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var punctuationless = s.replace(/[.,//#!$%/^&/*;:{}=/-_`~()]/g,"");
var finalString = punctuationless.replace(//s{2,}/g," ");
Resultados del código ejecutado en la consola Firebug:
Si desea retener solo alfabetos y espacios, puede hacer:
str.replace(/[^a-zA-Z ]+/g, '''').replace(''/ {2,}/'','' '')
si estás usando lodash
_.words(''This, is : my - test,line:'').join('' '')
Este ejemplo
_.words(''"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"'').join('' '')
str = str.replace(/[^/w/s]|_/g, "")
.replace(//s+/g, " ");
Quita todo, excepto los caracteres alfanuméricos y el espacio en blanco, y luego contrae varios caracteres adyacentes en espacios individuales.
Explicación detallada:
-
/w
es cualquier dígito, letra o guión bajo. -
/s
es cualquier espacio en blanco. -
[^/w/s]
es cualquier cosa que no sea un dígito, letra, espacio en blanco o guión bajo. -
[^/w/s]|_
es lo mismo que # 3, excepto con los guiones bajos añadidos nuevamente.