informaticaPC

Tutorial de JavaScript

Expresiones regulares

Expresiones regulares en JavaScript

Las expresiones regulares son usadas para realizar búsquedas avanzadas en una cadena de caracteres, mediante un patrón de caracteres.

Algunos de los caracteres especiales usados para crear patrones de caracteres en expresiones regulares son:

  • ^: principio de la cadena.
  • $: final de la cadena.
  • .: se admite cualquier carácter que no sea un salto de línea.
  • x|y: la coincidencia es positiva si se encuentra alguno de los caracteres especificados.
  • (abcde): la coincidencia es positiva si se encuentra el texto indicado entre los paréntesis.

Podemos usar corchetes para definir ciertas condiciones de búsqueda en el patrón de caracteres:

  • [abc]: se admite cualquier carácter que esté entre los indicados.
  • [^abc]: Cuando se usa ^ al principio de los corchetes indica negación: se admite cualquier caracter que no esté entre los indicados.
  • [0-9]: se admiten sólo dígitos.
  • [A-Z]: se admiten sólo letras en mayúsculas.
  • [a-z]: se admiten sólo letras en minúsculas.
  • [A-z] o [a-zA-Z]: se admiten sólo letras en mayúsculas o minúsculas.

Para especificar la repetición dentro de una cadena usaremos:

  • *: el carácter se encuentra o no, pudiéndose repetir un número indeterminado de veces.
  • +: el carácter debe existir, pudiéndose repetir un número indeterminado de veces.
  • ?: el carácter puede o no existir, una sola vez.
  • {n}: el carácter se repite el número de veces especificado entre las llaves.
  • {n,m}: el carácter se debe repetir un número de veces, entre el mínimo y máximo indicados.

También podemos usar los siguientes metacaracteres para configurar la búsqueda y tomar control sobre caracteres no imprimibles que puedan existir:

  • \d: admite dígito.
  • \D: admite cualquier carácter alfabético, no numérico.
  • \f: se encuentra un salto de página.
  • \n: se encuentra un salto de línea.
  • \s: se admiten referentes a espacios, como un espacio en blanco o tabulador.

Finalmente disponemos de los siguientes modificadores:

  • \g: indica que los caracteres a buscar pueden ser encontrados varias veces en la cadena de caracteres.
  • \i: especifica que la búsqueda se realizará sin diferenciar entre mayúsculas y minúsculas.

Para crear expresiones regulares en JavaScript asignaremos el patrón de caracteres diréctamente a una variable, o bien usaremos el Objeto RegExp() que contiene los siguientes métodos:

  • compile(): compila una expresión regular. Debe ser usado en caso de modificar la expresión regular definida en una variable.
  • exec(): busca una cadena dentro de otra, devolviéndola en caso de ser encontrada, o null en caso contrario.
  • test(): busca una cadena dentro de otra, devolviendo true si se ha encontrado o false en caso contrario.

A continuación te mostramos las formas de crear un patrón de caracteres:

// Cadenas de caracteres:
var cadena01 = "Cursos de informática gratis";
var cadena02 = "25/05/2011";

// Patrones (realizan lo mismo):
var patron01 = /gratis/gi;
var patron02 = new RegExp("gratis", "gi");

// Patrones (realizan lo mismo):
var patron03 = /^[a-zA-Z\s]+$/;
var patron04 = new RegExp("^[a-zA-Z\\s]+$");

// Patrones (realizan lo mismo):
var patron05 = /^\d{2}\/\d{2}\/\d{4}$/;
var patron06 = new RegExp("^\\d{2}\\/\\d{2}\\/\\d{4}$");

document.write( "CADENA: [" + cadena01 + "]<br />" );
document.write( "Encontrada la palabra 'gratis' (en mayúsculas o minúsculas): [" + patron01.test(cadena01) + "]<br />" );
document.write( "Encontrada la palabra 'gratis' (en mayúsculas o minúsculas): [" + patron02.test(cadena01) + "]<br />" );
document.write( "La cadena tiene sólo letras y espacios: [" + patron03.test(cadena01) + "]<br />" );
document.write( "La cadena tiene sólo letras y espacios: [" + patron04.test(cadena01) + "]<p />" );

document.write( "CADENA: [" + cadena02 + "]<br />" );
document.write( "La fecha es válida: [" + patron05.test(cadena02) + "]<br />" );
document.write( "La fecha es válida: [" + patron06.test(cadena02) + "]<br />" );

Descargar ejemplo

Expresiones regulares

IMPORTANTE: observas que usando RegExp() los modificadores se han de poner en el segundo parámetro (si los hay), y que se debe escapar la barra invertida \ usada para escapar a su vez otros caracteres.

Ten en cuenta que en 'patron03' y 'patron04' usamos + porque deseamos que al menos haya un carácter de entre los especificados (usaríamos * si admitiéramos como válida una cadena vacía).

Información

Si compruebas que no te funcionan bien las expresiones regulares asegúrate de guardar el archivo con codifición UTF-8.

Buscar en cadenas usando expresiones regulares

// Cadenas de caracteres:
var cadena01 = "patron";
var cadena02 = "patrones";
var cadena03 = "PATRONes";

// Patrones:
var patron01 = /patron/;    // La cadena contiene 'patron', en minúscula
var patron02 = /patron/i;   // La cadena contiene 'patron', en mayúsculas o minúsculas
var patron03 = /^patron$/;  // La cadena es exáctamente 'patron', en minúscula

// Resultado:
document.write( "CADENA: [" + cadena01 + "]<br />" );
document.write( "¿La cadena contiene 'patron' en minúscula?: " + patron01.test(cadena01) + "<br />" );
document.write( "¿La cadena contiene 'patron' en mayúsculas o minúsculas?: " + patron02.test(cadena01) + "<br />" );
document.write( "¿La cadena es exáctamente 'patron', en minúsculas?: " + patron03.test(cadena01) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena02 + "]<br />" );
document.write( "¿La cadena contiene 'patron' en minúscula?: " + patron01.test(cadena02) + "<br />" );
document.write( "¿La cadena contiene 'patron' en mayúsculas o minúsculas?: " + patron02.test(cadena02) + "<br />" );
document.write( "¿La cadena es exáctamente 'patron', en minúsculas?: " + patron03.test(cadena02) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena03 + "]<br />" );
document.write( "¿La cadena contiene 'patron' en minúscula?: " + patron01.test(cadena03) + "<br />" );
document.write( "¿La cadena contiene 'patron' en mayúsculas o minúsculas?: " + patron02.test(cadena03) + "<br />" );
document.write( "¿La cadena es exáctamente 'patron', en minúsculas?: " + patron03.test(cadena03) + "<br />" );

Descargar ejemplo

Expresiones regulares

Observa que en el segundo patrón de caracteres hemos usado /i para que no se distinga entre mayúsculas y minúsculas.

En el tercer patrón de caracteres usamos los símbolos ^ y $ para indicar el principio y final de la cadena respectivamente: con ello estamos indicando que queremos encontrar en dicha cadena una coincidencia exacta de lo especificado en el patrón de caracteres... no si los caracteres se encuentran en cualquier parte de la misma.

Otros ejemplos:

// Cadenas de caracteres:
var cadena01 = "Cursos de informática gratis";
var cadena02 = "Cu3rsos de informática gratis";
var cadena03 = "CURSOS de informática gratis";
var cadena04 = "CURSOSdeinformáticagratis";
var cadena05 = "123456789012345";

// Patrones:
var patron01 = /^[a-zA-Z\s]+$/; // La cadena contiene contiene sólo caracteres (no dígitos) y espacios
var patron02 = /[a-zA-Z\s]/;    // La cadena contiene contiene ALGÚN caracter alfabético o espacio

document.write( "CADENA: [" + cadena01 + "]<br />" );
document.write( "¿La cadena contiene contiene sólo caracteres (no dígitos) y espacios?: " + patron01.test(cadena01) + "<br />" );
document.write( "¿La cadena contiene contiene ALGÚN caracter alfabético o espacio?: "     + patron02.test(cadena01) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena02 + "]<br />" );
document.write( "¿La cadena contiene contiene sólo caracteres (no dígitos) y espacios?: " + patron01.test(cadena02) + "<br />" );
document.write( "¿La cadena contiene contiene ALGÚN caracter alfabético o espacio?: "     + patron02.test(cadena02) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena03 + "]<br />" );
document.write( "¿La cadena contiene contiene sólo caracteres (no dígitos) y espacios?: " + patron01.test(cadena03) + "<br />" );
document.write( "¿La cadena contiene contiene ALGÚN caracter alfabético o espacio?: "     + patron02.test(cadena03) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena04 + "]<br />" );
document.write( "¿La cadena contiene contiene sólo caracteres (no dígitos) y espacios?: " + patron01.test(cadena04) + "<br />" );
document.write( "¿La cadena contiene contiene ALGÚN caracter alfabético o espacio?: "     + patron02.test(cadena04) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena05 + "]<br />" );
document.write( "¿La cadena contiene contiene sólo caracteres (no dígitos) y espacios?: " + patron01.test(cadena05) + "<br />" );
document.write( "¿La cadena contiene contiene ALGÚN caracter alfabético o espacio?: "     + patron02.test(cadena05) + "<br />" );

Descargar ejemplo

Expresiones regulares en JavaScript

Ten en cuenta que en 'patron01' usamos + porque deseamos que al menos haya un carácter de entre los especificados (usaríamos * si admitiéramos como válida una cadena vacía).

He aquí unos ejemplos más:

// Cadenas de caracteres:
var cadena01 = "111-222-333";
var cadena02 = "C11-222-333";
var cadena03 = "111-222-3334";
var cadena04 = "11.222.333-X";
var cadena05 = "11.222.333-X4";
var cadena06 = "11.222.333-XB";
var cadena07 = "11.222.333-4";

// Patrones:
var patron01 = /^[0-9]{3}\-[0-9]{3}\-[0-9]{3}$/;            // Teléfono válido
var patron02 = /^[0-9]{2}\.[0-9]{3}\.[0-9]{3}\-[a-zA-Z]$/;  // NIF válido

document.write( "CADENA: [" + cadena01 + "]<br />" );
document.write( "¿Teléfono válido?: " + patron01.test(cadena01) + "<br />" );
document.write( "¿NIF válido?: "      + patron02.test(cadena01) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena02 + "]<br />" );
document.write( "¿Teléfono válido?: " + patron01.test(cadena02) + "<br />" );
document.write( "¿NIF válido?: "      + patron02.test(cadena02) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena03 + "]<br />" );
document.write( "¿Teléfono válido?: " + patron01.test(cadena03) + "<br />" );
document.write( "¿NIF válido?: "      + patron02.test(cadena03) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena04 + "]<br />" );
document.write( "¿Teléfono válido?: " + patron01.test(cadena04) + "<br />" );
document.write( "¿NIF válido?: "      + patron02.test(cadena04) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena05 + "]<br />" );
document.write( "¿Teléfono válido?: " + patron01.test(cadena05) + "<br />" );
document.write( "¿NIF válido?: "      + patron02.test(cadena05) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena06 + "]<br />" );
document.write( "¿Teléfono válido?: " + patron01.test(cadena06) + "<br />" );
document.write( "¿NIF válido?: "      + patron02.test(cadena06) + "<br />" );
document.write( "---------------------<p />" );

document.write( "CADENA: [" + cadena07 + "]<br />" );
document.write( "¿Teléfono válido?: " + patron01.test(cadena07) + "<br />" );
document.write( "¿NIF válido?: "      + patron02.test(cadena07) + "<br />" );
document.write( "---------------------<p />" );

Ejemplos de Expresiones regulares en JavaScript

Descargar ejemplo

Finalmente, veamos unos ejemplos usando los métodos search() y match() del Objeto String():

// Cadena de caracteres:
var cadena01 = "Cursos gratis de informática GRATIS";

// Patrones:
var patron01 = /gratis/;
var patron02 = /gratis/gi;

document.write( "CADENA: [" + cadena01 + "]<br />" );

document.write( "Palabra 'gratis' (en minúsculas), usando 'search()' encontrada en la posición: [" + cadena01.search(patron01) + "]<br />" );
document.write( "Palabra 'gratis' (en mayúsculas o minúsculas) encontrada en la posición: [" + cadena01.search(patron02) + "] (sólo se tiene en cuenta la primera coincidencia)<br />" );

document.write( "Palabra 'gratis' (en minúsculas), usando 'match()': [" + cadena01.match(patron01) + "]<br />" );
document.write( "Palabra 'gratis' (en mayúsculas o minúsculas), usando 'match()': [" + cadena01.match(patron02) + "]<br />" );

Descargar ejemplo

Expresiones regulares

Con /gi especificamos que se tendrán en cuenta todas las veces que se encuentre la cadena que deseamos buscar dentro de la otra, y sin diferenciar entre mayúsculas y minúsculas.

Información

Si compruebas que no te funcionan bien las expresiones regulares asegúrate de guardar el archivo con codifición UTF-8.

Más información

Vea también: [ Buscar en una cadena ]

Reemplazar texto en una cadena usando expresiones regulares

Para reemplazar texto en una cadena usando expresiones regulares utilizaremos el método replace() del Objeto String() junto con el patrón correspondiente. A continuación te mostramos un ejemplo:

// Cadena de caracteres:
var cadena01 = "gratis Cursos gratis de informática GRATIS";

// Patrones:
var patron01 = /gratis/;
var patron02 = /gratis/gi;

document.write( "CADENA: [" + cadena01 + "]<br />" );
document.write( "Cadena modificada: [" + cadena01.replace(patron01, "online") + "]<br />" );
document.write( "Cadena modificada: [" + cadena01.replace(patron02, "online") + "]<br />" );

Descargar ejemplo

El resultado sería:

En este otro ejemplo tenemos una función que podremos usar para eliminar espacios a derecha e izquierda:

function trim( cadena )
{
    cadena += "";
    cadena = cadena.replace(/^\s*/, '');
    return cadena.replace(/\s*$/, '');
}

Descargar ejemplo

Observa que en la primera línea concatenamos con una cadena vacía: esto es así para que no se genere un error si se ha pasado un número como parámetro (con ello estamos convirtiéndolo a cadena de texto).

Información

Si compruebas que no te funcionan bien las expresiones regulares asegúrate de guardar el archivo con codifición UTF-8.

Más información

Vea también: [ Reemplazar en una cadena ]

Expresiones regulares útiles

A continuación te mostramos una pequeña recopilación de expresiones regulares en JavaScript que nos resultarán útiles:

// Fecha en formato 'dd/mm/yyyy' (sólo se comprueba la estructura):
var patron01 = /^\d{2}\/\d{2}\/\d{4}$/;

// La cadena es exáctamente 'gratis' en minúsculas:
var patron02 = /^gratis$/;

// La cadena contiene 'gratis' en minúsculas:
var patron03 = /gratis/;

// La cadena contiene 'gratis', en mayúsculas o minúsculas:
var patron04 = /gratis/i;

// Sólo letras en mayúsculas/minúsculas, y espacios (OJO: no se incluyen 'ñ' ni 'Ñ'):
var patron05 = /^[a-zA-Z\s]+$/;

// Sólo letras en mayúsculas/minúsculas, y espacios (se incluyen 'ñ' y 'Ñ'):
var patron06 = /^[a-zA-ZñÑ\s]+$/;

// Teléfono:
var patron07 = /^[0-9]{3}\-[0-9]{3}\-[0-9]{3}$/;

// NIF (sólo se comprueba la estructura, no si la letra es la adecuada):
var patron08 = /^[0-9]{2}\.[0-9]{3}\.[0-9]{3}\-[a-zA-Z]$/;

// Sólo números. No se admite cadena vacía:
var patron09 = /^[0-9]+$/;

// Sólo cadena vacía o números:
var patron10 = /^[0-9]*$/;

// Sólo letras en mayúsculas/minúsculas incluídas con tilde:
var patron11 = /^[a-zA-ZñÑáéíóúÁÉÍÓÚ]+$/;

// Sólo letras en mayúsculas/minúsculas, acentudadas, espacios y comillas simples. No admite cadena vacía:
var patron12 = /^[a-zA-ZáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙñÑ\s\']+$/;

// Sólo cadenas vacías, o con números y/o letras en mayúsculas/minúsculas acentuadas,
// También espacios, comillas simples, dos puntos, puntos, comas, punto y coma y guiones.:
var patron13 = /^[0-9a-zA-ZáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙñÑ\s\'\:\.\,\;-]*$/;

// Sólo números y letras en mayúsculas/minúsculas acentuadas. No admite cadena vacía:
var patron14 = /^[0-9a-zA-ZáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙñÑ]+$/;

// Sólo números, letras en mayúsculas/minúsculas acentuadas, y espacios. No admite cadena vacía:
var patron15 = /^[0-9a-zA-ZáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙñÑ\s]+$/;

// E-Mail (sólo se comprueba la estructura):
var patron16 = /^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,4}$/i;
Información

IMPORTANTE: si compruebas que no te funcionan bien las expresiones regulares asegúrate de guardar el archivo con codifición UTF-8.

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso