2017-08-05 21 views
0

我有一个包含多项式表示形式的字符串。一些例子给出了波纹管:使用正则表达式在JS中转换多项式字符串表示形式

'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对象Stringmatch()方法。

这是我到目前为止已经试过: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'] 

我怎么在我目前的解决方案错过?

+1

如果你改变了正则表达式'polynomial.match(/ ?(\ + | \ - )[A-Z0-9 ^] +/GI);'? –

回答

1

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

+0

干得好赶上! –

2

你或许可以简化它的任何东西,然后非+/-:.[^+-]*

+0

不错!对于较小的正则表达式有没有时间利益? –

+0

在某种程度上是的..不是因为它的大小,而是因为它的复杂性。在你的情况下,我认为忽略情况标志而不是'A-Z'组和捕获组'(\ + | \ - )'而不是'[+ - ]'可能会让它慢一点。更重要的是,它按照您预期的无效输入方式工作。 – Slai