Я пишу математическое приложение на Java, которое использует Javascript для сценариев/ввода. Я хочу, чтобы иметь возможность ввести, скажем, x^2
, и заменить Java на pow(x,2)
перед отправкой на парсер JavaScript. Как я могу сделать этот тип замены? В одном фрагменте кода может быть несколько разных выражений, которые могут быть одной или несколькими строками.Замените var^power на pow (var, power)
ответ
UPDATE:
Я не знаю, сколько сложности вы ожидаете, но если вы хотите, чтобы быть в состоянии справиться с хитрым выражением, вы можете также использовать библиотеку парсера.
Предположим, что вы говорите о javascript, и вы заменяете ввод строки, выполните следующие действия.
"x^2".replace(/(.*)\^(\d+)/, "pow($1, $2)")
попробовать это: обновление: возможно в некоторых случаях
var re = /(?![\+\-\*\/\(\)\^\s])([a-zA-Z0-9]+)\^([a-zA-Z0-9]+)/gm;
var str = 'w*x^2 +5^9';
var subst = 'pow($1,$2)';
var result = str.replace(re, subst);
И лучше справочником для расчета математической. http://mathjs.org/
пример & выход
// expressions
math.eval('1.2 * (2 + 4.5)'); // 7.8
math.eval('5.08 cm to inch'); // 2 inch
math.eval('sin(45 deg)^2'); // 0.5
math.eval('9/3 + 2i'); // 3 + 2i
math.eval('det([-1, 2; 3, 1])'); // -7
Что делать, если входной сигнал 'y^3 + x^2'? Вопрос гласил: «В одном фрагменте кода может быть несколько разных выражений». – nnnnnn
И 32 * x^2 должны стать 32 * pow (x, 2), а не pow (32 * x, 2). –
Как насчет 'a^(b^c)' или '(a^b)^c'? Удачи в правильном выполнении этих замещений с помощью только регулярного выражения. – cdhowie
Вы должны раскошелиться анализатор esprima JS для добавления оператора ^
с соответствующим старшинства и т.д. Затем идти по дереву синтаксического анализа, определить, где он используется, и сделать лексический замена. Эта ссылка может быть полезна: http://ariya.ofilabs.com/2011/08/math-evaluator-in-javascript-part-2.html. Не совсем уверен, как вы это назовете из своей Java-программы, но я уверен, что вы можете это понять.
Или, анализатор в http://mathjs.org/, по-видимому, уже поддерживает ^
, так что вы можете использовать его. Или, есть http://silentmatt.com/javascript-expression-evaluator/, который также поддерживает ^
. Или http://jsep.from.so/, «крошечный парсер JavaScript-выражений».
Связанные SO вопрос: Safe evaluation of arithmetic expressions in Javascript
- 1. Замените нуль на последнее известное значение в Power Query
- 2. Что такое неопределенная ссылка на `pow ''
- 3. Замените тег html классом и var php
- 4. Почему Math.pow быстрее, чем кешированный Math.pow (var pow = Math.pow)
- 5. Prolog Power Function
- 6. pow() raise to floats
- 7. Замените, замените строку на perl
- 8. Использование pow() в C
- 9. undefined ссылка на `pow '- makefile
- 10. Замените '/' на '-'
- 11. Неопределенная ссылка на power
- 12. Вычисление экспоненты в C без Pow()
- 13. Как избавиться от ... Замените (замените (замените (замените (...?
- 14. Z3 Power Modulo Заявления
- 15. power (C++ - {templates}) = power (C++)?
- 16. Функция Pow() для цикла в C
- 17. Power Decomposition Power of 3
- 18. power function exponent JOptionPane java
- 19. проблема с numba и функцией pow
- 20. ** новый оператор питания вместо power() в php
- 21. Замените TwwQuery на ADOQuery Delphi XE
- 22. java.math.BigInteger pow (экспоненциальный) вопрос
- 23. Microsoft Power BI на iOS
- 24. Замените случайное изображение на сайте
- 25. Замените текущий url на document.URL
- 26. Gamma Correction @ Power Law Transformation
- 27. Использование var для выбора var в Perl
- 28. Параметры javascript pow - цифры Армстронга
- 29. excel power pivot and power query
- 30. Замените hsqldb на MySQL
Java и JavaScript являются различные языки с почти ничего общего для некоторого синтаксиса они оба унаследовали от C. Не перепутать их, за исключением. – cdhowie
@cdhowie Я не. В моем приложении Java используется JavaScript-парсер ('javax.script.ScriptEngine') для оценки введенных выражений в JavaScript. –
Я вижу. Ну, в конечном счете, единственный пуленепробиваемый способ сделать это - написать парсер JavaScript, который сможет распознать вашего дополнительного оператора. Все, что меньше этого, будет иметь оговорки, где замена не делает правильные вещи. Например, если 'x^2' появляется в строковом литерале, вы не хотите его заменять. – cdhowie