3.1 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7dba367417b2b2512ba9 | Lookahead positivo y negativo | 1 | 301360 | positive-and-negative-lookahead |
--description--
Los lookaheads son patrones que le indican a JavaScript que busque por anticipado en tu cadena para verificar patrones más adelante. Esto puede ser útil cuando deseas buscar varios patrones sobre la misma cadena.
Hay dos tipos de lookaheads: lookahead positivo y lookahead negativo.
Un lookahead positivo buscará para asegurarse de que el elemento en el patrón de búsqueda este allí, pero en realidad no lo coincidirá. Un lookahead positivo se usa como (?=...)
donde el ...
es la parte requerida que no coincide.
Por otro lado, un lookahead negativo buscará para asegurarse de que el elemento en el patrón de búsqueda no este allí. Un lookahead negativo se usa como (?!...)
donde el ...
es el patrón que no quieres que esté allí. El resto del patrón se devuelve si la parte de lookahead negativo no está presente.
Los lookaheads son un poco confusos, pero algunos ejemplos ayudarán.
let quit = "qu";
let noquit = "qt";
let quRegex= /q(?=u)/;
let qRegex = /q(?!u)/;
quit.match(quRegex);
noquit.match(qRegex);
Ambas llamadas a match
devolverán ["q"]
.
Un uso más práctico de lookaheads es comprobar dos o más patrones en una cadena. Aquí hay un verificador de contraseñas (ingenuamente) simple que busca entre 3 y 6 caracteres y al menos un número:
let password = "abc123";
let checkPass = /(?=\w{3,6})(?=\D*\d)/;
checkPass.test(password);
--instructions--
Utiliza los lookaheads en el pwRegex
para que coincida con las contraseñas que tengan más de 5 caracteres y dos dígitos consecutivos.
--hints--
Tu expresión regular debe usar dos lookaheads
positivos.
assert(pwRegex.source.match(/\(\?=.*?\)\(\?=.*?\)/) !== null);
Tu expresión regular no debe coincidir con la cadena astronaut
pwRegex.lastIndex = 0;
assert(!pwRegex.test('astronaut'));
Tu expresión regular no debe coincidir con la cadena banan1
pwRegex.lastIndex = 0;
assert(!pwRegex.test('banan1'));
Tu expresión regular debe coincidir con la cadena bana12
pwRegex.lastIndex = 0;
assert(pwRegex.test('bana12'));
Tu expresión regular debe coincidir con la cadena abc123
pwRegex.lastIndex = 0;
assert(pwRegex.test('abc123'));
Tu expresión regular no debe coincidir con la cadena 12345
pwRegex.lastIndex = 0;
assert(!pwRegex.test('12345'));
Tu expresión regular debe coincidir con la cadena 8pass99
pwRegex.lastIndex = 0;
assert(pwRegex.test('8pass99'));
Tu expresión regular no debe coincidir con la cadena 1a2bcde
pwRegex.lastIndex = 0;
assert(!pwRegex.test('1a2bcde'));
Tu expresión regular debe coincidir con la cadena astr1on11aut
pwRegex.lastIndex = 0;
assert(pwRegex.test('astr1on11aut'));
--seed--
--seed-contents--
let sampleWord = "astronaut";
let pwRegex = /change/; // Change this line
let result = pwRegex.test(sampleWord);
--solutions--
let pwRegex = /(?=\w{6})(?=\w*\d{2})/;