2021-02-06 04:42:36 +00:00
---
id: 587d7dba367417b2b2512ba9
2021-03-31 00:44:56 +09:00
title: Lookahead positivo y negativo
2021-02-06 04:42:36 +00:00
challengeType: 1
forumTopicId: 301360
dashedName: positive-and-negative-lookahead
---
# --description--
2021-03-31 00:44:56 +09:00
Los < dfn > lookaheads< / dfn > 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.
2021-02-06 04:42:36 +00:00
2021-03-31 00:44:56 +09:00
Hay dos tipos de lookaheads: < dfn > lookahead positivo< / dfn > y < dfn > lookahead negativo< / dfn > .
2021-02-06 04:42:36 +00:00
2021-03-31 00:44:56 +09:00
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.
2021-02-06 04:42:36 +00:00
2021-03-31 00:44:56 +09:00
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.
2021-02-06 04:42:36 +00:00
2021-03-31 00:44:56 +09:00
Los lookaheads son un poco confusos, pero algunos ejemplos ayudarán.
2021-02-06 04:42:36 +00:00
```js
let quit = "qu";
let noquit = "qt";
let quRegex= /q(?=u)/;
let qRegex = /q(?!u)/;
2021-03-31 00:44:56 +09:00
quit.match(quRegex);
noquit.match(qRegex);
2021-02-06 04:42:36 +00:00
```
2021-03-31 00:44:56 +09:00
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:
2021-02-06 04:42:36 +00:00
```js
let password = "abc123";
let checkPass = /(?=\w{3,6})(?=\D*\d)/;
2021-03-31 00:44:56 +09:00
checkPass.test(password);
2021-02-06 04:42:36 +00:00
```
# --instructions--
2021-03-31 00:44:56 +09:00
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.
2021-02-06 04:42:36 +00:00
# --hints--
2021-03-31 00:44:56 +09:00
Tu expresión regular debe usar dos `lookaheads` positivos.
2021-02-06 04:42:36 +00:00
```js
assert(pwRegex.source.match(/\(\?=.*?\)\(\?=.*?\)/) !== null);
```
2021-03-31 00:44:56 +09:00
Tu expresión regular no debe coincidir con la cadena `astronaut`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(!pwRegex.test('astronaut'));
```
2021-03-31 00:44:56 +09:00
Tu expresión regular no debe coincidir con la cadena `banan1`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(!pwRegex.test('banan1'));
```
2021-03-31 00:44:56 +09:00
Tu expresión regular debe coincidir con la cadena `bana12`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(pwRegex.test('bana12'));
```
2021-03-31 00:44:56 +09:00
Tu expresión regular debe coincidir con la cadena `abc123`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(pwRegex.test('abc123'));
```
2021-03-31 00:44:56 +09:00
Tu expresión regular no debe coincidir con la cadena `12345`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(!pwRegex.test('12345'));
```
2021-03-31 00:44:56 +09:00
Tu expresión regular debe coincidir con la cadena `8pass99`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(pwRegex.test('8pass99'));
```
2021-03-31 00:44:56 +09:00
Tu expresión regular no debe coincidir con la cadena `1a2bcde`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(!pwRegex.test('1a2bcde'));
```
2021-03-31 00:44:56 +09:00
Tu expresión regular debe coincidir con la cadena `astr1on11aut`
2021-02-06 04:42:36 +00:00
```js
2021-10-06 08:36:48 -07:00
pwRegex.lastIndex = 0;
2021-02-06 04:42:36 +00:00
assert(pwRegex.test('astr1on11aut'));
```
# --seed--
## --seed-contents--
```js
let sampleWord = "astronaut";
let pwRegex = /change/; // Change this line
let result = pwRegex.test(sampleWord);
```
# --solutions--
```js
let pwRegex = /(?=\w{6})(?=\w*\d{2})/;
```