На данный вопрос уже ответили:
var str = prompt('Введите строку','');
function bracked(str) {
var a = str.match(/\(/gm),
b = str.match(/\)/gm);
return a && b ? a.length == b.length : a == b;
}
alert(bracked(str))
Реализация задания со скобками говорит, что в строке ))(( они расставлены верно
const str = prompt('Введите строку', '))((');
const bracked = str => 0 === [...str].reduce((opened, symbol) => {
switch(true) {
case opened === false: case opened < 0: return false;
case symbol == '(': return ++opened;
case symbol == ')': return --opened;
default: return opened;
}
}, 0)
console.log(str, bracked(str))
Вот валидатор, который я писал N лет назад. Суть такая, что мы по последовательно идём по строке, и если встречаем элемент из openers
, то добавляем его индекс в массив arr
. Если встречаем элемент из closers
, то сравниваем его индекс с последним числом в массиве arr
(удаляя его из этого массива) и если оно не равно индексу из closers
, то валидация не пройдена.
Этот скрипт может свалидировать такие вложенные последовательности различных скобок: [()](){{}}
var input = document.querySelector('input');
function isValid() {
var str = input.value,
openers = '<{[(',
closers = '>}])',
arr = [],
valid = true;
for (var i = 0, len = str.length; i < len; i++) {
if (openers.indexOf(str[i]) >= 0) {
arr.push(openers.indexOf(str[i]));
} else if (closers.indexOf(str[i]) >= 0) {
if (closers.indexOf(str[i]) != arr.pop()) {
valid = false;
}
}
}
if (arr.length) {
valid = false;
}
input.className = valid ? 'valid' : 'error';
}
input.addEventListener('keyup', isValid)
* {
font-size: 1.2em;
}
input {
width: 98%;
padding: 0.2em;
}
.error {
background-color: #ffc6c6;
}
.valid {
background-color: #bdffc6;
}
<input type="text" />
в случае одного вида скобок, задачу можно решить просты подсчетом: при открывающей скобке - увеличивать счетчик, при закрывающей - уменьшать.
Если счетчик стал отрицательным - строка некорректная, если по завершении проверки счетчик больше 0, строка некорректная.
var str = '))((';
function bracked(str) {
var counter = 0;
for (var i = 0; i < str.length; i++) {
if (str[i] == '(') counter += 1;
else {
counter -= 1
if (counter < 0) return false;
}
}
return counter == 0;
}
console.log(bracked('))(('), bracked('()(())()'))
Также данную задачу можно решить при помощи стека:
var str = '))((';
function bracked(str) {
var stack = [];
for (var i = 0; i < str.length; i++) {
if (str[i] == '(') stack.push('(');
else {
var prev = stack.pop();
if (prev != '(') return false;
}
}
return stack.length == 0;
}
console.log(bracked('))(('), bracked('()(())()'))
такой подход довольно просто расширяется на несколько видов скобок. Для этого необходимо добавить объект для соответствия открывающих и закрывающих символов, и вместо открывающих в стек складывать закрывающие.
var str = '))((';
function bracked(str) {
var bracketmap = {
'(':')',
'{':'}',
'[':']'
};
var stack = [];
for (var i = 0; i < str.length; i++) {
if (str[i] in bracketmap) stack.push(bracketmap[str[i]]);
else {
var prev = stack.pop();
if (prev != str[i]) return false;
}
}
return stack.length == 0;
}
console.log(bracked('([})]'), bracked('([])[{()}]([])'))
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется такой код(прилагаю важные части для понимания)Игра найди пару
Всем приветСобственно вопрос как сделать в Owl Carousel, Thumbnails так же каруселью
При загрузкe страницы в input type="color" есть value, которое содержит уже по умолчанию цвет #0000ff - пробую сделать через trigger("input"), но ничего не происходит: