2013-06-11 2 views
0

Я пытаюсь разбить математические строки на операторах математики. напримерРазделить математическое выражение на операторах в Javascript

String = 7*6+3/2-5*6+(7-2)*5 

String1 = ["7","*","6","+","3","/","2","-","5","*","6"] 

Я пытался найти решение здесь, и это то, что я получаю

String1=String.split("(?<=[-+*/])|(?=[-+*/]"), но выглядит это не извлечение желаемого результата для строки1.

+0

Нет ли у вас '+' между '" 6 "," 3 "' – epascarello

+1

Что такое выражения, например 1--2? –

+2

Является ли 'String1' типом ввода или желаемым выходом? – JJJ

ответ

5

jsfiddle

var expression = "7.2*6+3/2-5*6+(7-2)*5"; 
var copy = expression; 

expression = expression.replace(/[0-9]+/g, "#").replace(/[\(|\|\.)]/g, ""); 
var numbers = copy.split(/[^0-9\.]+/); 
var operators = expression.split("#").filter(function(n){return n}); 
var result = []; 

for(i = 0; i < numbers.length; i++){ 
    result.push(numbers[i]); 
    if (i < operators.length) result.push(operators[i]); 
} 

console.log(result); 
+0

Метод фильтра doesn ' t работать в IE 8 или ниже, просто FYI. –

+0

Я хочу разделить только на операторов, это не даст правильный результат. Я имею десятичное число или несколько цифр. для ex: 7.5 * 32 + 2-6.97 – min2bro

+0

@ min2bro - сначала вы не упомянули об этом, во-вторых, это все так, минус изменение регулярного выражения, чтобы получить поплавки. – Gabe

2

EDIT:

Это работает, как принято отвечать, и в качестве бонуса не будет разрушаться из-за filter() в IE8 и ниже:

var expression = "7.2*6+3/2-5*6+(7-2)*5"; 
var splitUp = expression.match(/[^\d()]+|[\d.]+/g); 
document.body.innerHTML = splitUp; 

http://jsfiddle.net/smAPk/

+0

Ваше решение элегантно, но и у вас, и с принятым ответом есть ошибка. следующее выражение '5 + -1' возвращает' ['5', '+ -', '1'] ', что не имеет особого смысла. У вас все еще есть мой upvote;) –

0

Прежде всего, если вы хотите использовать регулярное выражение с split() вы должны сначала создать его:

var expr = new RegExp("(?<=[-+*/])|(?=[-+*/])") 
// note: you missed a) at the end 

К сожалению, RegExp двигатель в большинстве браузеров не поддерживает просмотр назад, так что он не будет работать так или иначе. Вы должны сделать это в цикле.

Смежные вопросы