Si tengo una cadena con cualquier tipo de carácter no alfanumérico:
"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"
javascript
regex
Quentin Fisk
fuente
fuente
\s
) con un solo espacio. Si desea contraer cualquier número de espacios en blanco a una sola, que dejaría fuera del límite superior de este modo:replace(/\s{2,}/g, ' ')
.@+?><[]+
):replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. Si alguien está buscando un conjunto aún un poco más completo.!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Lo que funciona mejor para mí, por lo que otra alternativa sería:replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
Elimina todo excepto los caracteres alfanuméricos y los espacios en blanco, 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 el n. ° 3, excepto con los guiones bajos agregados nuevamente.fuente
wouldn't
ydon't
Estos son los caracteres de puntuación estándar para US-ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Para la puntuación Unicode (como comillas rizadas, guiones cortos, 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
.En conjunto, y escapó adecuadamente, obtienes el siguiente RegExp:
Eso debería coincidir con casi cualquier puntuación que encuentre. Entonces, para responder la pregunta original:
Fuente 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
fuente
/ [^ A-Za-z0-9 \ s] / g debe coincidir con todos los signos de puntuación pero mantener los espacios. Por lo tanto, puede usar
.replace(/\s{2,}/g, " ")
para reemplazar espacios adicionales si necesita hacerlo. Puede probar la expresión regular en http://rubular.com/Actualización : solo funcionará si la entrada es ANSI English.
fuente
Me encontré con el mismo problema, esta solución funcionó y fue muy legible:
Resultado:
El truco consistía en crear un conjunto negado . Esto significa que coincide con todo lo que no está dentro del conjunto, es decir
[^abc]
, no a, b o c\W
no es una palabra, por[^\W]+
lo que negará todo lo que no sea una palabra char .Al agregar el _ (guión bajo) puede negar eso también.
Haga que se aplique globalmente
/g
, luego puede ejecutar cualquier cadena a través de él y borrar la puntuación:Bonito y limpio ;)
fuente
Lo pondré aquí para otros.
Haga coincidir todos los caracteres de puntuación para todos los idiomas:
Construido a partir de la categoría de puntuación Unicode y agregado algunos símbolos de teclado comunes como
$
corchetes y\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
reemplazo básico:
agregado como espacio
agregado ^ para invertir el patrón para que coincida no con la puntuación sino con las palabras mismas
para un lenguaje como el hebreo tal vez para eliminar "'la comilla simple y la doble. Y pensar más en ello.
usando este script:
Paso 1: seleccione en Firefox con el control una columna de números U + 1234 y cópielo, no copie U + 12456, reemplazan Inglés
paso 2 (lo hice en Chrome), busque algo de área de texto y péguelo en él, luego haga clic derecho y haga clic en inspeccionar. entonces puede acceder al elemento seleccionado con $ 0.
el paso 3 copió sobre las primeras letras el ascii como caracteres separados no rangos porque alguien podría agregar o eliminar caracteres individuales
fuente
En un lenguaje compatible con Unicode, la propiedad de caracteres de puntuación Unicode es
\p{P}
, que generalmente puede abreviarse\pP
y, a veces, expandirse\p{Punctuation}
para facilitar la lectura.¿Está utilizando una biblioteca de expresiones regulares compatibles con Perl?
fuente
Si desea eliminar la puntuación de cualquier cadena, debe usar la
P
clase Unicode.Pero, dado que las clases no se aceptan en JavaScript RegEx, puede probar este RegEx que debe coincidir con todos los signos de 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 tu objetivo:
fuente
Para cadenas en-US (inglés americano) esto debería ser suficiente:
Tenga en cuenta que si admite UTF-8 y caracteres como chino / ruso y todo esto, esto también los reemplazará, por lo que realmente debe especificar lo que desea.
fuente
si está usando lodash
Este ejemplo
fuente
Según la lista de puntuación de Wikipedia, tuve que construir la siguiente expresión regular que detecta las puntuaciones:
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
fuente
/
(la más común), entonces debe ser escapó dentro de la clase de caracteres anterior añadiendo una barra invertida antes, como esto:\/
. Esta es la forma en que lo utilizaría:"String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. Por cierto, no veo el backtick (`) en ningún lado, ¿cómo es que?Si desea retener solo alfabetos y espacios, puede hacer:
fuente
Depende de lo que intente devolver. Usé esto recientemente:
fuente