This includes certificates (where it does nothing), but does not include any translations.
3.1 KiB
3.1 KiB
id, title, challengeType, isHidden, forumTopicId
id | title | challengeType | isHidden | forumTopicId |
---|---|---|---|---|
587d7dba367417b2b2512ba9 | Positive and Negative Lookahead | 1 | false | 301360 |
Description
(?=...)
where the ...
is the required part that is not matched.
On the other hand, a negative lookahead will look to make sure the element in the search pattern is not there. A negative lookahead is used as (?!...)
where the ...
is the pattern that you do not want to be there. The rest of the pattern is returned if the negative lookahead part is not present.
Lookaheads are a bit confusing but some examples will help.
let quit = "qu";
let noquit = "qt";
let quRegex= /q(?=u)/;
let qRegex = /q(?!u)/;
quit.match(quRegex); // Returns ["q"]
noquit.match(qRegex); // Returns ["q"]
A more practical use of lookaheads is to check two or more patterns in one string. Here is a (naively) simple password checker that looks for between 3 and 6 characters and at least one number:
let password = "abc123";
let checkPass = /(?=\w{3,6})(?=\D*\d)/;
checkPass.test(password); // Returns true
Instructions
pwRegex
to match passwords that are greater than 5 characters long, do not begin with numbers, and have two consecutive digits.
Tests
tests:
- text: Your regex should use two positive <code>lookaheads</code>.
testString: assert(pwRegex.source.match(/\(\?=.*?\)\(\?=.*?\)/) !== null);
- text: Your regex should not match <code>"astronaut"</code>
testString: assert(!pwRegex.test("astronaut"));
- text: Your regex should not match <code>"banan1"</code>
testString: assert(!pwRegex.test("banan1"));
- text: Your regex should match <code>"bana12"</code>
testString: assert(pwRegex.test("bana12"));
- text: Your regex should match <code>"abc123"</code>
testString: assert(pwRegex.test("abc123"));
- text: Your regex should not match <code>"1234"</code>
testString: assert(!pwRegex.test("1234"));
- text: Your regex should not match <code>"8pass99"</code>
testString: assert(!pwRegex.test("8pass99"));
- text: Your regex should not match <code>"12abcde"</code>
testString: assert(!pwRegex.test("12abcde"));
- text: Your regex should match <code>"astr1on11aut"</code>
testString: assert(pwRegex.test("astr1on11aut"));
Challenge Seed
let sampleWord = "astronaut";
let pwRegex = /change/; // Change this line
let result = pwRegex.test(sampleWord);
Solution
var pwRegex = /^\D(?=\w{5})(?=\w*\d{2})/;