| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Баланс символов |
| Автор: s1lver 5.12.2008, 21:50 |
| Подсобите с такой задачей: Нужно выполнить проверку баланса скобок в текстовой области и если открывающейся скобке не соответствует закрывающаяся, то вывести ошибку во вторую текстовую область. |
| Автор: Michael.de 6.12.2008, 00:19 |
| s1lver, каких скобок? Таких: ( ) или ещё [ ] и { } ? Например так: есть стринг, с помощью charAt() считываем в цикле каждый знак и сравниваем его с открывающейся и закрывающейся скобками. Открывающая скобка - плюсуем 1 в переменную, закрывающая - минусуем. В конце смотришь: переменная не равна 0 (как и в начале) - ошибка. Попробуй написать это сам, а мы поможем |
| Автор: Itsys 6.12.2008, 09:29 | ||||
| А можно с помошью регулярки: сначала ищем все нормальные в цикле wile exec регулярку
меняем тестируемую переменную на второй элемент возвращенного массива а после проверяем наличие открывающей/закрывающей скобки
и если находим, выводим сообщение ЗЫ если надо проверять не только (), то цикл запускается несколько раз. |
| Автор: s1lver 6.12.2008, 11:06 | ||
Круглых вообще-то, про те я даже не подумал |
| Автор: s1lver 6.12.2008, 11:48 | ||
Вот,тока чур сильно не ругать за глупость
|
| Автор: s1lver 6.12.2008, 12:31 | ||
Не, наверное надо так сделать, поправьте где ошибусь:
|
| Автор: Michael.de 6.12.2008, 19:17 | ||
s1lver, вот как пример:
|
| Автор: Itsys 7.12.2008, 11:20 | ||
|
| Автор: ksnk 7.12.2008, 12:21 | ||
| Michael.de, )))))((((( - галактеко в полной безопасносте... Itsys, (1+(2+3)*5) - галактеко в опасносте... Вот, написалось...
P.S. http://phpclub.ru/talk/showthread.php?s=&threadid=106961&highlight=%E2%EB%EE%E6%E5%ED%ED%EE%F1%F2%FC рекурсивную для анализа вложенности скобок. Правда она для JS, imho, не будет работать... |
| Автор: s1lver 7.12.2008, 16:19 | ||
Конечно |
| Автор: Michael.de 8.12.2008, 03:57 |
| Так я и не спорю, просто в первом посте не написано, что это будет применяться для анализа мат. выражения. А алгоритм я знаю P.S. Пару лет назад я написал (на яве) пару классов, которые получали строку типа sin(cos(x-2))+x^(x/2-Pi/4^(5-tan(sin(x-1)))) ... и т.п. , анализировали на мат. корректность записи и считали (при зад. х) значение выражения. Т.е. как бы JavaScript, но... без eval() |
| Автор: s1lver 8.12.2008, 18:04 |
| А что сюда еще можно прикрутить? Так на всякий случай... |