2009-12-04 18 views
8

Cuando busqué algo, encontré una pregunta respondida en este sitio. 2 de las respuestas contienen¿Qué significa /([^.]*).(.*)/?

/([^.]*)\.(.*)/

en su respuesta. La pregunta se encuentra en Find & replace jquery. Soy novato en JavaScript, así que me pregunto, ¿qué significa? Gracias.

+4

Creo que vi esa blasfemia una vez en una tira cómica. O, si lo prefiere, una expresión regular utilizada para buscar y reemplazar. – xpda

+1

@ xpda +1 por hacerme reír el viernes por la mañana – MrFidge

Respuesta

3

Es una expresión regular que busca aproximadamente una cadena que no contiene un punto, seguida de un punto y luego una cadena que contiene los caracteres.

8

Es regular expression (coincide con no períodos, seguido de un punto seguido de cualquier cosa (piense en "archivo.ext")). Y debes correr, no caminar, para aprender sobre ellos. Explicar cómo funciona esta expresión regular particular no te ayudará ya que necesitas comenzar más simple. Así que comience con regex tutorial y recoja Mastering Regular Expressions.

+1

+1 por decir "aprender sobre expresiones regulares". –

+1

-1 por no mencionar grupos, el objetivo de esta expresión. – UncleO

+0

@uncleo: Bien, pero ese no era el punto de su pregunta. Ni siquiera se dio cuenta de que era una expresión regular, por lo que explicar las complejidades de esta particular expresión regular no lo ayudará demasiado. – jason

4

Todo excepto un punto, seguido de un punto, seguido de cualquier cosa.

Puede probar regex'es en regexpal

2

Esa es una expresión regular. Las expresiones regulares son herramientas poderosas si las usa correctamente.

Esa expresión regular particular extrae el nombre de archivo y la extensión de una cadena que se parece a "file.ext".

+0

o '.textfile' (la primera parte es opcional) – Amarghosh

+1

La última parte también es opcional. '.' coincidiría también. Y '...........' coincidiría en el primer '.' también. – eyelidlessness

+0

o 'Makefile' (la extensión es opcional) (pero la expresión regular no coincidirá con eso) – Thanatos

2

Es una expresión regular que divide una cadena en dos partes: todo antes del primer período y luego el resto. La mayoría de los motores de expresiones regulares (incluido el Javascript) le permiten acceder a esas partes de la cadena por separado (utilizando $ 1 para referirse a la primera parte, y $ 2 para la segunda parte).

27
/([^.]*)\.(.*)/ 

Déjennos deconstruirlo. Las barras inicial y final son delimitadores y marcan el inicio y el final de la expresión regular.

Luego hay un grupo entre paréntesis: ([^.]*) Los parentheseis están ahí solo para agrupar una cadena. Los corchetes denotan un "grupo de caracteres", lo que significa que cualquier carácter dentro de este grupo se acepta en su lugar. Sin embargo, este grupo es negado por el primer carácter que es ^, lo que revierte su significado. Como el único carácter junto a la negación es un punto, coincide con un solo carácter que no es un punto. Después de los corchetes es * (asterisco), lo que significa que los corchetes pueden coincidir cero o más veces.

Luego llegamos al \.. Este es un período de escape. Los períodos en expresiones regulares tienen un significado especial (excepto cuando se escapa o en un grupo de caracteres). Esto coincide con un período literal en el texto.

(.*) es un nuevo subgrupo paranthesized. Esta vez, el período coincide con cualquier carácter, y el asterisco dice que se puede repetir tantas veces como sea necesario.

En resumen, la expresión encuentra cualquier secuencia de caracteres (que no es un punto), seguida de un período único, seguido de nuevo por cualquier carácter.

Editar: Se eliminó la parte sobre el acortamiento, ya que se anula el objetivo asumido de la expresión regular.

+3

Más que aumentar la legibilidad, este tipo de resultados no es el de la expresión regular. que es probable que extraiga las partes de la cadena antes y después del primer período. –

+0

Me doy cuenta de que esto es antiguo, pero probablemente debería mencionar que los grupos también pueden coincidir con CERO caracteres. es decir. las coincidencias válidas son 'a.b', 'a.', '.b' y '.', siendo los grupos 'a' y 'b', 'a' y '', '' y 'b', y '' y '' respectivamente. – MattJenko

-2

la.el carácter coincide con cualquier carácter, excepto con los caracteres de salto de línea, el \ r o \ n.

el^niega lo que sigue (en este caso el punto)

el * significa "cero o más veces"

el grupo paréntesis, y la captura,

la \ le permite hacer coincidir un carácter especial (como el punto o la estrella)

por lo que ([^.]*) significa que cualquier salto de línea se repite cero o más veces (simplemente se come los retornos de carro).

este (.*) parte significa cualquier cadena de caracteres cero o más veces (excepto los saltos de línea)

y la \. significa un punto real de

por lo que toda la cosa sería cero o más saltos de línea seguido de un punto seguido de cualquier número de caracteres.

Para obtener más información y una muy buena referencia sobre las expresiones regulares Salida: http://www.regular-expressions.info/reference.html

+0

[^.] Coincide con cualquier cosa que no sea un carácter de punto literal '.' . – UncleO

+0

¿es esta una sintaxis específica de JavaScript? ¿Cuál es la diferencia entre ^. y \ ? –

+1

@Joe Basirico: '\ .' coincide con un punto literal,'^.' dentro de una clase de caracteres como esta '[^.]' Coincide con cualquier cosa que ** no ** sea un punto literal. –

1

Esta es una expresión regular con un poco de uso avanzado.

Considere una versión más simple: /[^.]*\..*/ que es igual que arriba sin paréntesis. Esto coincidirá con cualquier cadena con al menos un punto. Cuando se agregan los paréntesis y se produce una coincidencia, las variables \1 y \2 contendrán las partes coincidentes de los paréntesis. El primero tendrá algo antes del primer punto. La segunda parte tendrá todo después del primer punto.

Ejemplos:

input: foo...bar 
\1: foo 
\2: ..bar 

input: .foobar 
\1: 
\2: foobar 
1

Esta expresión regular genera dos expresiones coincidentes que se pueden recuperar.

Las dos partes son la cadena antes del primer punto (que puede estar vacía) y la cadena después del primer punto (que puede contener otros puntos).

La única restricción en la entrada es que contiene al menos un punto. Coincidirá con "." contrario a algunas de las otras respuestas, pero los grupos recuperados estarán vacíos.

0

Es una expresión regular, que básicamente es un patrón de caracteres que se usa para describir otro patrón de caracteres. Una vez usé expresiones regulares para encontrar una dirección de correo electrónico dentro de un archivo de texto, y pueden usarse para encontrar casi cualquier patrón de texto dentro de un cuerpo más grande de texto siempre que escriba la expresión regular correctamente.

6

original: /([^.]*)\.(.*)/

de Split esto como:
[1] ([^.]*): Se dice que coincida con todos los caracteres excepto . [ period ]
[2] \.: coincidir con un periodo
[3] (.*): Coincide con cualquier carácter

por lo que se convierte en [1] Coincide con todos los caracteres que no son . [ period ] [2] hasta que encuentre un .[ period ] y luego [3] coincida con todos c personajes.