--- title: Aserciones slug: Web/JavaScript/Guide/Regular_Expressions/Assertions tags: - Aserciones - Expresiones Regulares - Guía - JavaScript - Referencia - regex translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions original_slug: Web/JavaScript/Guide/Regular_Expressions/Aserciones ---
{{jsSidebar("JavaScript Guide")}}
Las aserciones incluyen límites, que indican el comienzo y el final de líneas y palabras, y otros patrones que indican de alguna manera que el reconocimiento es posible (incluidas las expresiones anticipadas, condicionales e inversas).
Caracteres | Significado |
---|---|
^ |
Coincide con el comienzo de la entrada. Si el indicador multilínea se establece en Este caracter tiene un significado diferente cuando aparece al comienzo de un {{JSxRef("../Guide/Regular_Expressions/Grupos_y_rangos", "grupo")}}. |
$ |
Coincide con el final de la entrada. Si el indicador multilínea se establece en |
\b |
Marca el límite de una palabra. Esta es la posición en la que un caracter de palabra no va seguido o precedido por otro caracter de palabra, por ejemplo, entre una letra y un espacio. Ten en cuenta que el límite de una palabra encontrada no se incluye en el resultado. En otras palabras, la longitud de un límite de palabra encontrada es cero. Ejemplos:
Para hacer coincidir un carácter de retroceso ( |
\B |
Coincide con un límite sin palabra. Esta es una posición en la que el caracter anterior y siguiente son del mismo tipo: ambos deben ser palabras o ambos deben ser no palabras, por ejemplo, entre dos letras o entre dos espacios. El principio y el final de una cadena se consideran no palabras. Igual que el límite de palabras encontradas, el límite sin palabras reconocidas tampoco se incluye en el resultado. Por ejemplo, |
Nota: El caracter ?
también se puede utilizar como cuantificador.
Caracteres | Significado |
---|---|
x(?=y) |
Aserción anticipada: Coincide con "x" solo si "x" va seguida de "y". Por ejemplo, |
x(?!y) |
Aserción anticipada negativa: Coincide con "x" solo si "x" no está seguida de "y". Por ejemplo, |
(?<=y)x |
Aserción de búsqueda inversa: coincide con "x" solo si "x" está precedida por "y". Por ejemplo, |
(?<!y)x |
Aserción de búsqueda inversa negativa: coincide con "x" solo si "x" no está precedida por "y". Por ejemplo, |
// Usa límites Regex para arreglar cadenas con errores. let multilineaIncorrecta = `tey, la brillante manzena vered toy cuelga en una rama del arbol vered`; // 1) Usa ^ para corregir la coincidencia al principio de la cadena y justo después de la nueva línea. multilineaIncorrecta = multilineaIncorrecta.replace(/^t/gim,'h'); console.log(1, multilineaIncorrecta); // corrige 'tey', 'toy' => 'hey', 'hoy'. // 2) Usa $ para arreglar el reconocimiento al final del texto. multilineaIncorrecta = multilineaIncorrecta.replace(/ed$/gim,'de'); console.log(2, multilineaIncorrecta); // corrige 'vered' => 'verde'. // 3) Usa \b para encontrar los caracteres justo en el borde entre una palabra y un espacio. multilineaIncorrecta = multilineaIncorrecta.replace(/\ba/gim,'á'); console.log(3, multilineaIncorrecta); // corrige 'arbol' sin tocar nada más. // 4) Usa \B para encontrar los caracteres dentro de los bordes de una entidad. multilineaCorrecta = multilineaIncorrecta.replace(/\Ben/gim,'an'); console.log(4, multilineaCorrecta); // corrige 'manzena' pero no toca 'en'.
^
Usa ^
para hacer coincidir al comienzo de la entrada. En este ejemplo, podemos obtener las frutas que comienzan con 'A' con una expresión regular /^A/
. Para seleccionar las frutas adecuadas, podemos utilizar el método {{JSxRef("Objetos_globales/Array/filter", "filter")}} con un {{JSxRef("Funciones/Arrow_functions", "función flecha")}}.
let frutas = ["Manzana", "Sandía", "Naranja", "Aguacate", "Fresa", "Melón"]; // Selecciona frutas que comiencen con 'M' por la Regex /^M/. // Aquí se usa el símbolo de control '^' solo en un rol: Reconocer desde el inicio una entrada. let frutasEmpiezanConM = frutas.filter(fruta => /^M/.test(fruta)); console.log(frutasEmpiezanConM); // [ 'Manzana', 'Melón' ]
En el segundo ejemplo, ^
se usa tanto para hacer coincidir al comienzo de la entrada como para crear conjuntos de caracteres negados o complementados cuando se usa dentro de {{JSxRef("../Guide/Regular_Expressions/Grupos_y_rangos", "grupos")}}.
let frutas = ["Manzana", "Sandía", "Naranja", "Aguacate", "Fresa", "Melón"]; // Seleccionar frutas que no comiencen por 'M' con la regexp /^[^M]/. // En este ejemplo, se representan dos significados del símbolo de control '^': // 1) Inicio coincidente de la entrada // 2) Un conjunto de caracteres negado o complementado: [^M] // Es decir, coincide con cualquier cosa que no esté encerrado entre los corchetes. let frutasNoEmpiezanConM = frutas.filter(fruta => /^[^M]/.test(fruta)); console.log(frutasNoEmpiezanConM); // [ "Sandía", "Naranja", "Aguacate", "Fresa" ]
let frutasConDescripcion = ["Manzana roja", "Piña amarilla", "Aguacate verde"]; // Selecciona descripciones que contengan terminaciones de palabras 'ja' o 'de': let deJaSeleccion = frutasConDescripcion.filter(descr => /(de|ja)\b/.test(descr)); console.log(deJaSeleccion); // ["Manzana roja", "Aguacate verde"]
// JS aserción anticipada x(?=Y) let regex = /Primer(?= prueba)/g; console.log('Primer prueba'.match(regex)); // [ 'Primer' ] console.log('Primer melocotón'.match(regex)); // null console.log('Esta es mi Primer prueba en un año.'.match(regex)); // [ 'Primer' ] console.log('Este es mi Primer melocotón en un mes.'.match(regex)); // null
Por ejemplo, /\d+(?!\.)/
coincide con un número solo si no va seguido de un punto decimal. /\d+(?!\.)/.exec('3.141')
coincide con "141" pero no con "3."
console.log(/\d+(?!\.)/g.exec('3.141')); // [ '141', index: 2, input: '3.141' ]
Diferente significado del uso de la combinación ?!
en {{JSxRef("../Guide/Regular_Expressions/Aserciones", "Aserciones")}} /x(?!y)/
y de [^?!]
en {{JSxRef("../Guide/Regular_Expressions/Grupos_y_rangos", "Rangos")}}.
let naranjaNoLimon = "¿Quieres beber jugo de naranja? ¡Sí, no quiero tomar jugo de limón!"; // Diferente significado del uso de la combinación '?!' en Aserciones /x(?!y)/ y [^?!] en Rangos. let regexNoSeleccionaLimon = /[^?!]+beber(?! de limón)[^?!]+[?!]/gi console.log(naranjaNoLimon.match(regexNoSeleccionaLimon)); // [ '¿Quieres beber jugo de naranja?' ] let regexNoSeleccionaNaranja = /[^?!]+tomar(?! de naranja)[^?!]+[?!]/gi console.log(naranjaNoLimon.match(regexNoSeleccionaNaranja)); // [ ' ¡Sí, no quiero tomar jugo de limón!' ]
let naranjas = ['naranja madura A', 'naranja verde B', 'naranja madura C',]; let naranjas_maduras = naranjas.filter(fruta => fruta.match(/(?<=naranja) madura/)); console.log(naranjas_maduras); // [ 'naranja madura A ', 'naranja madura C' ]
Especificación |
---|
{{SpecName('ESDraft', '#sec-assertion', 'RegExp: Aserciones')}} |
Para obtener información sobre la compatibilidad del navegador, consulta la {{JSxRef("../Guide/Regular_Expressions", "tabla principal de compatibilidad de expresiones regulares", "#Compatibilidad_del_navegador")}}.