Объясните мне, почему этот код не работает и как это исправить:
var str = "AaAA";
var r = new RegExp("[A-Z]{3,}");
if (r.test(str)) {
console.log(":)");
} else {
console.log(":(");
}
Я хочу проверить, что в строке есть три и более заглавные буквы, но проверка проходит только, если они идут в строке подряд AAA, а если AaAA, то уже нет.
Данное выражение [A-Z]{3,} как раз и указывает на то, что 3 и более букв идут подряд.
Однако вместо test можно воспользоваться методом match, который вернет все совпадения, и проверить количество найденных совпадений, например:
var str = "AaAA";
var r = new RegExp("[A-Z]", 'g');
if (str.match(r).length >= 3) {
console.log(":)");
} else {
console.log(":(");
}
Можно и в одну строчку:
(new RegExp('^.*[A-Z].*[A-Z].*[A-Z].*$')).test('BlaBlaBla');
const pattern = new RegExp('^.*[A-Z].*[A-Z].*[A-Z].*$');
let actual = pattern.test('aaa');
console.assert(
!actual,
{msg: `'aaa' not pass`}
);
actual = pattern.test('aAbB.Z');
console.assert(
actual,
{msg: `'aAbB.Z' not pass`}
);
actual = pattern.test('aAbB.Za@');
console.assert(
actual,
{msg: `'aAbB.Z' not pass`}
);
actual = pattern.test('aAbB');
console.assert(
!actual,
{msg: `'aAbB' not pass`}
);
actual = pattern.test('BlaBlaBla');
console.assert(
actual,
{msg: `'BlaBlaBla' not pass`}
);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей