Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.10.2019, 16:57
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Как проверить комбинацию символов в строке?
Нужно реализовать функцию
function verif(<тут переданная строка>) {
    // тело функции
}

которая принимает строки вида:
  • verif("#АБВГДЕЁЖЗИЙ(КЛМНОПРС)ТУФХЦЧШЩЬЫЪЭЮЯ#");
    
  • verif("#абвгдеёжзийклмнопрстуфхцчшщьыъэюя#");
    
  • verif("*АБВГДЕЁЖЗИЙКЛМН(ОПРСТУФХЦЧШЩЬЫЪЭЮЯ*");
    
И вернёт true если в строке есть комбинация из символов ( и ), * и *, # и #
Но вернёт false если внутри комбинации встретиться символ из другой комбинации, типа:
  • verif("*АБВГДЕЁЖЗИЙКЛМН(ОПРСТУФХЦЧШЩЬЫЪЭЮЯ*");
    
    - должно вернуть false, потому что внутри комбинации * и * есть символ (
При этом
  • verif("#АБВГДЕЁЖЗИЙ(КЛМНОПРС)ТУФХЦЧШЩЬЫЪЭЮЯ#");
    
    вернёт true, потому что пройдёт проверку на комбинацию ( и )
Ответить с цитированием
  #2 (permalink)  
Старый 12.10.2019, 18:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

CryNet,
вариант ...
function verif(str) {
    const reg = /(^[*#])(?![*#()а-яё]*?\1$)|[(](?![*#()а-яё]*?[)])/gi;//
    return !reg.test(str)
}
console.log(verif("#АБВГДЕЁЖЗИЙ(КЛМНОПРС)ТУФХЦЧШЩЬЫЪЭЮЯ#")); //true
console.log(verif("*АБВГДЕЁЖЗИЙКЛМН(ОПРСТУФХЦЧШЩЬЫЪЭЮЯ*")); //false
console.log(verif("#абвгдеёжзийклмнопрстуфхцчшщьыъэюя#")); //true
Ответить с цитированием
  #3 (permalink)  
Старый 12.10.2019, 18:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

рони, не всему отвечает, например:

console.log(verif("#АБВГДЕЁЖЗИЙ(КЛМ ОПРС)ТУФХЦЧШЩЬ)ЫЪЭЮЯ#")) будет true, но должно быть false.
Ответить с цитированием
  #4 (permalink)  
Старый 12.10.2019, 19:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

laimas,
если так?
function verif(str) {
    const reg = /(^[*#])[()а-яё]*\1$/i;
    const rg = /[(][^()]*?[)]/;
    const r = /[()]/;
    if(!reg.test(str)) return false;
    for (; rg.test(str); ) {rg.lastIndex = 0; str = str.replace(rg, ''); rg.lastIndex = 0;}
    return !r.test(str)
}
console.log(verif("#АБВГДЕЁЖЗИЙ(КЛМНОПРС)ТУФХЦЧШЩЬЫЪЭЮЯ#")); //true
console.log(verif("*АБВГДЕЁЖЗИЙКЛМН(ОПРСТУФХЦЧШЩЬЫЪЭЮЯ*")); //false
console.log(verif("#абвгдеёжзийклмнопрстуфхцчшщьыъэюя#")); //true
console.log(verif("#АБВГДЕЁЖЗИЙ(КЛМНОПРС)ТУФХЦЧШЩЬЫ)ЪЭЮЯ#")); //false
Ответить с цитированием
  #5 (permalink)  
Старый 12.10.2019, 19:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну если скобки в скобках недопустимы, то тоже не пойдет.
Ответить с цитированием
  #6 (permalink)  
Старый 12.10.2019, 20:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

рони, видимо лучше не напрягать разборкой по различным выражениям, а получить массив посимвольный, проверить крайние, затем срез 1, -1 обойти циклом, проверяя - если допустимый символ (не # или *), продолжаем, иначе если ")", а открывающая скобка не запоминалась, то ошибка, иначе очистить открывающую скобку. Если "(" и следующий индекс не символ разрешенный, то ошибка, иначе запомнить открывающую скобку.
Ответить с цитированием
  #7 (permalink)  
Старый 12.10.2019, 20:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

laimas,
подожду, может уже достаточно.
Ответить с цитированием
  #8 (permalink)  
Старый 12.10.2019, 20:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от рони
может уже достаточно
Может быть , но странное если такие условия и при этом можно "#АБВГДЕЁЖ(ЗИЙ(КЛМНОПРС)ТУФ) ХЦЧШЩЬЫЪЭЮЯ#"
Ответить с цитированием
  #9 (permalink)  
Старый 12.10.2019, 21:02
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от рони Посмотреть сообщение
CryNet,

function verif(str) {
    const reg = /(^[*#])(?![*#()а-яё]*?\1$)|[(](?![*#()а-яё]*?[)])/gi;
Блин. Сложно. Если нужно будет добавить новые символы или условие, то я запутаюсь. Но всё равно спасибо
Ответить с цитированием
  #10 (permalink)  
Старый 12.10.2019, 21:53
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Я не очень понял, что требуется. Это разновидность задачи о проверке скобочной целостности с тремя видами скобок?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить авторизован ли пользователь в соц сетях AnteFil Элементы интерфейса 3 28.11.2016 03:58
как проверить object на "пустоту" Cache Общие вопросы Javascript 7 06.02.2015 20:27
Как проверить на этом-ли хостинге стоит сайт из определнного домена? Gamestop Серверные языки и технологии 3 05.11.2012 06:51
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40