Символ шляпки внутри наборов в регулярках JavaScript

Как вы знаете, шляпка внутри [ ] делает отрицание, будучи написанной в начале скобок. Значит, она является спецсимволом внутри этих скобок. Чтобы получить шляпку как символ, нужно или заэкранировать ее, или убрать с первого места.

Пример

В следующем примере шаблон поиска такой: первый символ - это все кроме 'd', потом две буквы 'x'.

javascriptlet str = 'axx bxx ^xx dxx';
let res = str.replace(/[^d]xx/g, '!');

В результате в переменную запишется следующее:

javascript'! ! ! dxx'

Пример

А теперь шаблон поиска такой: первый символ - это 'd' или '^', потом две буквы 'x':

javascriptlet str = 'axx bxx ^xx dxx';
let res = str.replace(/[d^]xx/g, '!');

В результате в переменную запишется следующее:

javascript'axx bxx ! !'

Пример

Можно не убирать шляпку с первого места, а просто заэкранировать ее с помощью обратного слеша, и она станет обозначать саму себя:

javascriptlet str = 'axx bxx ^xx dxx';
let res = str.replace(/[\^d]xx/g, '!');

В результате в переменную запишется следующее:

javascript'axx bxx ! !'

Практические задачи

Задание 1

Дана строка:

javascriptlet str = '^xx axx ^zz bkk @ss';

Напишите регулярку, которая найдет строки по шаблону: шляпка или собака, а затем две латинских буквы.

Задание 2

Дана строка:

javascriptlet str = '^xx axx ^zz bkk @ss';

Напишите регулярку, которая найдет строки по шаблону: НЕ шляпка и не собака, а затем две латинских буквы.

Задание 3

Дана строка:

javascriptlet str = '^xx axx ^zz bkk';

Напишите регулярку, которая найдет строки по шаблону: не шляпка и не пробел, а затем две латинских буквы.