С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
Модератор
 Аватар для Thisman
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992

Парсинг строки

22.07.2014, 11:38. Показов 5269. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, хотелось бы узнать, какой регуляркой можно добиться того, что бы

JavaScript
1
2
3
var str = "10 * (2* (12+3) +4) + 4 * (2-3)"
var reg = ? // та самая регулярка
str.match(reg); // ["(2*(12+3)+4)","(2-3)"]
Возможно ли это с помощью регулярных выражений?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2014, 11:38
Ответы с готовыми решениями:

RegEx, сложный парсинг строки
Здравствуйте, помогите написать регулярку, и можно ли вобще в данном случае ее написать? На входе строка: ss.aa=x.zv xyz...

Парсинг JSON-строки и вывод данных из строки
Добрый день! Я разрабатываю Android-клиент, который мог бы обмениваться данными с размещенной WCf-службой. Для чтения данных из службы...

Парсинг строки
Есть строка <div class="image"><a href="/music/%D0%9C%D0%B0%D1%88%D0%B0+Word+Foo"><span class="pictureFrame...

8
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
22.07.2014, 21:10
Цитата Сообщение от Thisman Посмотреть сообщение
какой регуляркой можно добиться того, что бы
Что бы что?
0
Модератор
 Аватар для Thisman
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
23.07.2014, 04:26  [ТС]
newJS, ну я же привел в низу пример кода, что бы из этой строки: "10 * (2* (12+3) +4) + 4 * (2-3)", выборка была вот такой ["(2*(12+3)+4)","(2-3)"]
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
23.07.2014, 06:47
пример, это хорошо, словами напиши что надо, исходная строка она что, всегда одинаковая?
в выходной строке явно удалены пробелы и одно действие, что должно быть?
регулярка привязывается к исходной строке, к тому что в ней может быть, а чего не может
если в исходную строку добавить еще что то, то как правило регулярка перестает работать
поэтому и не хотят связываться
0
Модератор
 Аватар для Thisman
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
23.07.2014, 07:50  [ТС]
newJS, в принципе, я уже решил вопрос немного по другому, но ради интереса если только. Суть в том, что есть выражение допустим, в этом выражении есть блоки ( заключены в скобки ) , мне нужно ,что бы регулярка доставал все эти блоки, ПРИ ЭТОМ! В самих блоках тоже могут быть подблоки ( опять же заключены в скобки ) , я привел пример выражение, которое в принципе охватывает все нужные мне варианты, вот и спрашиваю, возможно ли с помощью регулярных выражений заменить допустим все внешние скобки ( самый высокий уровень ) на какое-нибудь выражение ( строка, число- не важно ).
Я эту задачу через рекурсию делаю ,доходя до самого нижнее уровня, но ради интереса хочу узнать, можно ли через регулярки решить задачу?
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
23.07.2014, 11:05
Скорее всего можно на регулярках , но я немного не понял задачу, если опишешь подробнее с несколькими примерами (исходная строка, и то что должно получится в итоге) то попробую написать тебе выражение.

Добавлено через 44 секунды
Кстати в регулярках также есть рекурсия.
0
Модератор
 Аватар для Thisman
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
23.07.2014, 11:40  [ТС]
Igsit, ну вот примеры : нужно найти все скобки самого верхнего уровня и то что между ними.

JavaScript
1
2
3
4
"10 + (2-4)" => ["(2-4)"];
"10 + (2-4) / (3 + 5)" => ["(2-4)","(3+5)"];
"(10 / 4 + (4 - 5) * (4 + 3))" =>["(10 / 4 + (4 - 5) * (4 + 3))"];
"10 * 2 / ( 4 * (1 - 5))" => ["(4*(1-5))"];
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
24.07.2014, 00:35
Твоя задача очень простая, и не нужно никаких рекурсий, вот попробуй:

JavaScript
1
2
3
4
5
6
7
//var str='10 + (2-4)';
var str='10 + (2-4) / (3 + 5)';
//var str='(10 / 4 + (4 - 5) * (4 + 3))';
//var str='10 * 2 / ( 4 * (1 - 5))';
 
var reg = /\((?:[^()]|(?:\(.*\)))*\)/g;
result=str.match(reg);
Добавлено через 2 минуты
Главное чтобы выражение в исходной строке было правильным, т.е. количества открывающих и закрывающих скобок равны и правильность вложенности скобок.
1
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
18.08.2014, 23:19
Цитата Сообщение от Thisman Посмотреть сообщение
Возможно ли это с помощью регулярных выражений?
JavaScript
1
2
3
var str = "10 * (2* (12+3) +4) + 4 * (2-3)";
str.match(str.replace(/\.|\*|\+|\\/g, function(x) { return "\\"+x }).replace(/\(/g, "(\\(").replace(/\)/g, "\\))"))
// ["10 * (2* (12+3) +4) + 4 * (2-3)", "(2* (12+3) +4)", "(12+3)", "(2-3)"]
PS: Это очень плохой способ вычислять выражение.
PPS: Доказано, что проверка скобочной последовательности на корректность при помощи регулярных выражений невоможна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2014, 23:19
Помогаю со студенческими работами здесь

парсинг строки
Добрый день. Стоит задача - "найти производную многочлена. Многочлен может быть большой, но только с неотрицательными целыми степенями и...

парсинг строки
допустим имеется строка "Привет, мир! Прощай, мир." Scanner по умолчанию будет возвращать куски "Привет,", "мир!",...

Парсинг строки
У меня есть строка следующего типа: ...

Парсинг строки
Доброго времени суток. В метод класса передается строка формата 1+2 Нужно распарсить строку на части 1 передать полю left +...

Парсинг строки
Доброе Утро! Напишите, пожалуйста, как в строке найти число double. Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru