使用正则表达式转换JS中的多项式字符串表示形式

时间:2017-08-05 19:51:54

标签: javascript regex math polynomial-math

我有一个包含多项式表示的字符串。下面给出一些例子:

'1+3x'
'3y+1'
'-2+50x1'
'50x+31x^2-29'
'3.85x^3-2000'
`5x^2+2x+3`

很少有事情需要注意:

  • 这些条款不包含特定顺序。
  • 只有一个不确定的小写字母后跟一个数字。 (例如xx1
  • 系数可以是任何实数。如果为零,则不显示该术语。 (例如33x^2+x-10.333x^2+1

我想将每个术语拆分为不同的数组元素。

'1+3x' // => ['1', '+3x']
'3y+1' // => ['3y', '+1']
'-2+50x1' // => ['-2', '+50x1']
'50x+31x^2-29' // => ['50x', '+31x^2', '-29']
'3.85x^3-2000' // => ['3.85x^3', '-2000']
'5x^2+2x+3' // => ['5x^2', '+2x', '+3']

为了满足上述要求,我使用JS中match()对象的String方法。

这是我到目前为止所尝试的:polynomial.match(/[a-z0-9.^]+(\+|\-)?/gi);

但是我的输出与我想要的略有不同。

'1+3x' // => ['1+', '3x']
'3y+1' // => ['3y+', '1']
'-2+50x1' // => ['2+', '50x1']
'50x+31x^2-29' // => ['50x+', '31x^2-', '29']
'3.85x^3-2000' // => ['3.85x^3-', '2000']
'5x^2+2x+3' // => ['5x^2+', '2x+', '3']

我目前的解决方案中缺少什么?

2 个答案:

答案 0 :(得分:2)

您可以将其简化为非+/-:.[^+-]*

之后的任何内容

答案 1 :(得分:1)

试试这个:polynomial.match(/(\+|\-)?[a-z0-9.^]+/gi); 我希望它对你有用