Una vez perdí la mayor parte de una tarde con un único cuantificador codicioso. Estaba escribiendo un mapa de redireccionamiento para una migración de WordPress (unos cientos de URL antiguas que necesitaban reescribirse en nuevas babosas) y tenía una expresión regular pretendido para capturar la babosa final de cada camino. Funcionó en las tres URL que probé en mi cabeza. No funcionó en el cuarto, que tenía dos segmentos de ruta, porque .* Había tragado alegremente el primer slash y todo lo que había después. La regla redirigió en silencio la mitad del sitio al lugar equivocado, y me enteré por un lector, no por mis pruebas, porque mi "probando" estaba mirando el patrón y confiando en él.
Ese es el problema central con las expresiones regulares: son solo escritura hasta que las ejecutas contra algo. Un patrón se lee como plausible hasta el momento en que la entrada real lo demuestra mal, y los modos de falla son silenciosos. Una expresión regular que no coincide con nada arroja ningún error. Una expresión regular que coincide con demasiadas cosas no arroja ningún error. Una expresión regular con un grupo de captura sutilmente equivocado le entrega la subcadena incorrecta y sigue adelante. La única forma de conocer un patrón hace lo que piensas es alimentarlo con el texto desordenado, cargado de casos, que realmente verá y acechar en lo que agarra.
un Probador de expresión regular cierra esa brecha. Pones tu patrón en un cuadro, tu texto de muestra en otro y cada coincidencia se ilumina en su lugar, con los grupos de captura desplegados para que puedas ver exactamente qué porción de la cadena aterrizó en el grupo 1 versus el grupo 2. El que construí para Toolz.dev se ejecuta en el navegador 's nativo RegExp motor, el mismo que usa su código JavaScript y TypeScript, por lo que lo que ve en el probador es lo que obtiene en producción. Sin aproximación, no "suficientemente cerca".
Esta guía cubre cómo usar el probador para depurar patrones rápidamente, qué hace realmente cada indicador, cómo aparece capturar grupos y grupos con nombre en la salida, y los errores específicos de JavaScript que hacen tropezar a las personas que provienen de Python o PCR.
TL;Dr: Pegue su patrón en el Probador de expresión regular de Toolz.dev (No se necesitan barras), conmute las banderas G/I/M/S/U/Y y suelte el texto de prueba a continuación. Las coincidencias resaltan en vivo con colores alternos, cada grupo de captura numerado y con nombre se muestra por coincidencia y los errores de sintaxis muestran el mensaje exacto del motor. Utiliza el motor REAL JavaScript RegExp, ejecuta 100% del lado del cliente, por lo que los registros sensibles nunca se cargan y se empareja con el Constructor de expresiones regulares Para ensamblar patrones desde cero.
¿Cómo se prueba una expresión regular sin ejecutar todo su programa?
La forma lenta de depurar una expresión regular es el bucle con el que la mayoría de nosotros comenzamos: edite el patrón en su código, ejecute el programa, lea la salida, adivine qué salió mal, repita. Cada iteración cuesta una ejecución completa del programa y la retroalimentación es indirecta: verá el resultado del partido, no del partido en sí.
Un probador colapsa ese bucle a nada. Pega el patrón, pega el texto representativo y ve las coincidencias de inmediato. Cuando cambia un carácter en el patrón, se actualiza la actualización. Esto aprieta la retroalimentación hasta el punto en que puede sondar- prueba un + donde tuviste un *, agregue un límite de palabra, haga que un grupo no capture y observe cómo el efecto aterriza en tiempo real en lugar de imaginarlo.
La disciplina clave es usar fáctico texto de prueba, no el ejemplo limpio en tu cabeza. La URL que rompió mi mapa de redireccionamiento tenía dos segmentos de ruta; mi caso de prueba mental tenía uno. Si hubiera pegado la lista real de URL antiguas en un probador, la coincidencia codiciosa habría sido visiblemente incorrecta en la línea cuatro. Tome las líneas de registro reales, las entradas reales del usuario, las rutas de archivos reales, incluidas las feas, y deje que el probador le muestre dónde se desmorona el patrón antes que sus usuarios.
¿Qué cambian realmente las banderas de expresiones regulares?
Las banderas modifican cómo se aplica todo el patrón, y malinterpretarlos está detrás de una gran parte de "por qué no funciona este trabajo". los ensayador Expone las seis banderas de JavaScript como alternancias para que puedas cambiar una y ver el cambio de resultado.
g - global. Sin él, las paradas coincidentes en el primer golpe. Con él, el motor encuentra cada coincidencia en el texto. En el probador, global está activado de forma predeterminada porque casi siempre desea ver todas las coincidencias; apáguelo para confirmar cómo es una llamada de coincidencia única. String.match sin g volvería.
yo - ignorar caso. hace que todo el patrón sea insensible a las mayúsculas y minúsculas, por lo error partidos Error y ERROR. Directo, y la bandera más utilizada después de G.
m - multilínea. Este es ampliamente malinterpretado. lo hace no meter . saltos de línea cruzada. cambia lo que ^ y $ Anclar a: con m, coinciden al principio y al final de cada hilada, no solo el comienzo y el final de toda la cadena. Si está haciendo coincidir línea por línea en un registro, desea esto.
s - puntoTodo. Esta es la bandera que hace . hacer coincidir los caracteres de nueva línea. sin ella, . Coincide con cualquier carácter exceptuar Un salto de línea, por lo que un patrón destinado a abarcar varias líneas a menudo se detiene en silencio en la primera. Si su partido debe cruzar los límites de la línea, s es lo que necesitas, no m.
tu - unicode. Habilita el modo Unicode completo, lo que hace \u{...} Se escapa al trabajo, trata a los pares sustitutos como puntos de código único y hace que las clases de caracteres como \p{Letter} disponible. Importante cuando su texto tiene emoji o scripts no latinos.
y - pegajoso. ancla cada intento de partido a la posición exacta de lastIndex, por lo que la coincidencia solo tiene éxito si comienza allí con precisión. Es una bandera de nicho que se usa en tokenizadores y analizadores; la mayoría de los trabajos cotidianos nunca lo tocan.
La confusión que más cuesta es m frente contra s. Las personas buscan multilínea cuando significan dotall. Si su punto no está cruzando líneas, necesita s. Si sus anclas no están alcanzando los límites de la línea, necesita m. Resuelven diferentes problemas y se suelen utilizar juntos.
¿Cómo se muestran los grupos de captura en la salida?
Los paréntesis en un patrón hacen dos trabajos: agrupan sub-patrones para cuantificadores o alternancias, y captar el segmento coincidente para la extracción. Cuando usted 'Estamos usando un expresiones regulares para extraer datos del texto - una fecha ' año y mes, una línea de registro ' marca de tiempo y nivel - los grupos de captura son el punto completo, y obtenerlos mal es la fuente más común de " el patrón coincide pero obtuve la cadena incorrecta."
los ensayador Enumera cada coincidencia con sus grupos de captura que se encuentran debajo. El grupo 1 es el primer subpatrón paréntesis, el grupo 2 el segundo, y así sucesivamente, cada uno se muestra con el texto exacto que capturó para esa coincidencia. Esto hace que los errores de límite de grupo sean obvios: si el Grupo 1 capturó más de lo que esperaba, puede verlo y tirar de los paréntesis.
Los grupos con nombre reciben el mismo tratamiento. cuando escribes (?<year>\d{4})-(?<month>\d{2}), el evaluador muestra las capturas por su nombre - <year> y <month>- junto con sus equivalentes numerados, para que pueda confirmar los nombres asignados a las porciones que desea antes de confiar match.groups.year en código. Los grupos con nombre hacen que los patrones se autodocumentan y el código sea más legible, y verlos resolver correctamente en el probador es la forma más rápida de confiar en ellos.
Una trampa relacionada Las superficies del probador: un grupo que participa en el patrón pero no coincide en un intento dado, muestra como "sin coincidencia" en lugar de una cadena vacía. Esa distinción importa, porque en JavaScript tal grupo es undefined, y el código que asume que siempre es una cadena. Verlo marcado en el probador te dice que protejas ese acceso.
¿Qué sabor a Regex es este y por qué importa?
Las expresiones regulares no son un solo idioma. El patrón que funciona en Python re el módulo puede comportarse de manera diferente (o agregar) JavaScript, y viceversa. Este ensayador utiliza JavaScript (ECMAScript) motor integrado en su navegador, que es byte por byte, se ejecuta el mismo motor Node.js. Entonces, si usted 'Está escribiendo código JavaScript, TypeScript o Node, los resultados aquí son exactamente lo que hará su código.
Esa precisión corta en ambos sentidos. Si copia un patrón de una respuesta de desbordamiento de pila, escrita para PCRE (PHP, y el preg_ funciones que uso constantemente en el trabajo de WordPress) o para Python, algunas características ganaron 't traducir. Históricamente, JavaScript carecía de afirmaciones detrás de la mirada, las obtuvo hace relativamente poco tiempo y todavía maneja algunas escapadas de propiedades Unicode de manera diferente. Cuantificadores posesivos y grupos atómicos de PCRE don' No existe en JavaScript en absoluto. Recursion, una característica de PCRE para hacer coincidir estructuras anidadas, no tiene equivalente de JavaScript.
El resultado práctico: prueba el sabor en el que te desplegarás. Un probador que implementa fielmente un motor es más útil que uno que implementa un promedio borroso de todos ellos, porque "funcionó en el probador" debe significar "Funcionará en mi código." para PHP y WordPress Work. Tengo en mente las diferencias y verifico el lado del servidor por separado; para cualquier cosa JavaScript, este probador es la fuente de la verdad. El conjunto de herramientas más amplio para este tipo de verificación de idioma se cubre en el Guía de herramientas de codificación.
¿Cuáles son los usos cotidianos de un probador de expresiones regulares?
Construcción y depuración de patrones de validación
Campos de correo electrónico, números de teléfono, códigos postales, slugs, cadenas de versiones semánticas: cada formulario valida algo y la validación suele ser una expresión regular. El probador le permite agregar casos incómodos a su patrón antes de enviarlos: el correo electrónico con una etiqueta de dirección positiva, el número de teléfono con una extensión, la cadena de versión similar 1.10.0 que un patrón ingenuo trunca. Pegue una columna de valores reales y observe cuáles no coinciden.
Extraer datos de registros
Los registros del servidor, los registros de aplicaciones y las exportaciones de CSV son texto semiestructurado, y la expresión regular es la forma en que extraes campos de ellos. Los grupos de captura toman la marca de tiempo, el nivel, el ID de solicitud. El desglose del grupo por partido de tester's es exactamente la vista que necesita aquí: pegue una docena de líneas de registro reales y confirme que cada campo llegue al grupo correcto en todas ellas, no solo en la ordenada primera línea. Esto encaja con el Flujo de trabajo de depuración de API donde los cuerpos de respuesta y los encabezados se eliminan para detectar valores específicos.
Buscar y reemplazar a través de una base de código
Los editores e IDEs admiten la expresión regular en el búsqueda y reemplazo, y un patrón defectuoso puede volver a escribir mucho más de lo previsto. probando el concurso si está en un probador dedicado antes de ejecutar el reemplazo, el seguro es económico: vea exactamente lo que selecciona el patrón en una muestra representativa y luego ejecute el reemplazo con confianza. Mi desastre en el mapa de redireccionamiento fue fundamentalmente un hallazgo y reemplazo que nunca probé primero con aportes reales.
Aprendizaje y enseñanza Regx
El resaltado en vivo hace que el probador sea una herramienta de aprendizaje genuina. Cree un patrón de una ficha a la vez y observe cómo se reduce el juego de partidos y crece a medida que agrega anclas, cuantificadores y clases. vista \d+ Coge un número entero y luego \d Coge un solo dígito hace más para la comprensión que cualquier explicación en prosa. Cuando esté listo para armar un patrón a partir de componentes en lugar de depurar uno existente, el Constructor de expresiones regulares es la herramienta complementaria.
¿Cómo evitar la trampa de partido de longitud cero?
Un patrón que puede coincidir con una cadena vacía - a*, \d*, (foo)?- puede "match" en cada posición entre personajes, produciendo una avalancha de coincidencias vacías. Código de coincidencia ingenuo que no avanza 't avanza más allá de un bucle de coincidencia de longitud cero para siempre. El ensayador protege contra esto internamente al avanzar siempre, por lo que nunca se cuelga, pero espectáculo usted los fósforos vacíos.
Esa pantalla es una característica, no ruido. Una pila de fósforos vacíos es el probador que le dice que su cuantificador es demasiado permisivo. Si quisiste decir "uno o más dígitos", escribió \d* cuando quisiste \d+. Si se requiere un grupo, lo marcó como opcional con ?. Ver las coincidencias vacías es el diagnóstico que te señala en la solución. Cuando su patrón es el correcto, las coincidencias son las subcadenas que le importan y nada más.
JavaScript Regex vs Otros sabores: una comparación rápida
| ráfaga | JavaScript (este probador) | PCC (PHP) | pitón re |
|---|---|---|---|
| Grupos con nombre | (?<name>...) |
(?<name>...) investigaciones operacionales (?P<name>...) |
(?P<name>...) |
| mirar hacia atrás | Compatible (motores modernos) | sostenido | sostenido |
| Grupos atómicos / Possivo | No compatible | sostenido | limitado |
| recursividad | No compatible | sostenido | No compatible |
| Punto coincide con bandera de nueva línea | s (dotal) |
s (dotal) |
re.DOTALL |
Propiedad Unicode \p{...} |
se requiere u decaer a |
se requiere u modificador |
regex Solo módulo |
| coincidencia pegajosa | y decaer a |
\G fondear |
\G-como vía match categoría |
La lección de la tabla es que "regex" es una familia, no un estándar. La sintaxis se superpone lo suficiente como para adormecerlo en patrones de copia en los idiomas, y las diferencias son exactamente las características avanzadas que busca en problemas difíciles. Prueba en tu sabor objetivo. Para JavaScript y Node, ese es este probador; Kit de herramientas para desarrolladores web Cubre donde encajan las otras herramientas específicas del idioma.
¿Es seguro probar la expresión regular con texto confidencial?
El texto con el que se prueba la expresión regular es a menudo el tipo delicado: líneas de registro de producción con direcciones IP e ID de usuario, exportaciones con direcciones de correo electrónico, archivos de configuración con nombres de host internos. Esos son precisamente los datos que no debería Pegue en una herramienta que lo envíe a un servidor.
los Probador de expresión regular de Toolz.dev se ejecuta completamente en su navegador. La compilación de patrones, la coincidencia, la extracción de grupos: todo es JavaScript del lado del cliente, sin ninguna solicitud de red que lleve su patrón o texto a ninguna parte. Corta tu conexión después de que la página se carga y sigue funcionando. Eso' es una garantía de arquitectura, no una oración de política de privacidad, y es el mismo principio de navegador primero detrás de cada herramienta del conjunto, establecido en el Guía de privacidad de datos.
Lo que significa que puede pegar las líneas de registro reales, las que tienen la PII real que crea un patrón & 39;s aparecen casos de borde, y depurarlas de forma segura. Ese & #39;s el punto: el probador solo es útil si le proporciona entrada real, y la entrada real suele ser exactamente lo que puede & #39;t enviar a otra persona & #39;s servidor.
preguntasrán el
¿Cómo pruebo una expresión regular en línea?
Ingrese su patrón en el campo de patrón sin las barras circundantes, elija sus indicadores y pegue texto de muestra en el área de prueba. Las coincidencias se resaltan instantáneamente y se enumeran grupos de captura para cada coincidencia. Todo se ejecuta en su navegador; no se carga nada.
¿Qué sabor de expresiones regulares utiliza este probador?
Utiliza el motor RegExp (ECMAScript) de JavaScript integrado en su navegador, que es idéntico al de Node.js. Los resultados coinciden con la forma en que se comporta el mismo patrón en JavaScript y TypeScript. JavaScript Regex se diferencia del módulo RE, del módulo P de Python y de los patrones de Java en algunas funciones avanzadas como grupos atómicos y recursividad, así que pruebe el sabor en el que se desplegará.
¿Qué significan las banderas de expresiones regulares G, I, M y S?
La bandera g (global) encuentra todas las coincidencias en lugar de detenerse en la primera. La bandera i hace que la coincidencia no distinga entre mayúsculas y minúsculas. La bandera m (multilínea) hace que los anclajes ^ y $ coincidan en los saltos de línea en lugar de solo en el inicio y el final de la cadena. La bandera s (puntoTodo) permite que el punto también coincida con los caracteres de la nueva línea. Las banderas m y s a menudo se confunden: m cambia las anclas, s cambia el punto.
¿Cómo funcionan los grupos de captura en el probador?
Los paréntesis en su patrón crean grupos de captura. El probador enumera cada grupo numerado con el texto que capturó para cada coincidencia, por lo que puede verificar qué segmento de la cadena se apodera de cada parte del patrón. grupos nombrados escritos como (?...) se muestran por su nombre junto con los grupos numerados.
¿Por qué mi expresión regular no coincide con nada o arroja un error?
Un patrón que no coincide con nada suele tener un carácter demasiado específico o un carácter especial sin escapar, como un punto literal o un signo más. Un patrón que arroja un error tiene un problema de sintaxis, como un corchete desequilibrado o paréntesis. El probador muestra el mensaje de error exacto del motor para que pueda localizar el problema rápidamente.
¿Cómo coincido en varias líneas?
Habilite el indicador S (DoTall) si necesita que el punto se amplíe y active la línea M (multilínea) si desea que los anclas ^ y $ coincidan al principio y al final de cada línea. La combinación de ambos permite que un solo patrón funcione de forma natural contra la entrada de varias líneas, como registros o filas CSV.
¿Es seguro probar la expresión regular contra datos confidenciales?
Sí. Todas las coincidencias ocurren en JavaScript dentro de su navegador: no se envía ningún patrón ni texto de prueba a ningún servidor, no se registra nada y la herramienta funciona con su conexión deshabilitada. Puede realizar pruebas de forma segura con archivos de registro, datos personales o formatos propietarios.
¿Cuál es la diferencia entre un probador de expresiones regulares y un constructor de expresiones regulares?
Un probador de expresiones regulares ejecuta un patrón existente con el texto para que pueda verificarlo y depurarlo, mientras que un generador de expresión regular lo ayuda a construir un patrón a partir de componentes o plantillas comunes. Use el constructor de expresiones regulares en este sitio para ensamblar un patrón, luego llévelo al probador para verificarlo con datos de muestra reales.
Las expresiones regulares permanecen escritas solo hasta que las ejecutas con entradas reales y las fallas son silenciosas: nada coincide, demasiadas coincidencias, el grupo incorrecto captura y ningún error te lo indica. Un evaluador hace visible el patrón: Pega tu expresión regular, aliméntelo con el texto real feo y observe exactamente lo que agarra antes de que agarra lo incorrecto en la producción.



