使用正则表达式转换 JS 中的多项式字符串表示
Convert Polynomial string representation in JS using Regular Expressions
我有一个包含多项式表示的字符串。下面给出了一些示例:
'1+3x'
'3y+1'
'-2+50x1'
'50x+31x^2-29'
'3.85x^3-2000'
`5x^2+2x+3`
需要注意的几点:
- 条款不包含特定顺序。
- 只有一个不确定的小写字母,后面可能跟一个数字。 (例如
x
或 x1
)
- 系数可以是任何实数。如果为零,则不会显示该术语。 (例如
33x^2+x-10.3
或 33x^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中使用了String
对象的match()
方法。
这是我目前尝试过的方法: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']
我目前的解决方案遗漏了什么?
试试这个:polynomial.match(/(\+|\-)?[a-z0-9.^]+/gi);
希望对你有用
您可以将其简化为任何后跟非 +/- 的内容:.[^+-]*
我有一个包含多项式表示的字符串。下面给出了一些示例:
'1+3x'
'3y+1'
'-2+50x1'
'50x+31x^2-29'
'3.85x^3-2000'
`5x^2+2x+3`
需要注意的几点:
- 条款不包含特定顺序。
- 只有一个不确定的小写字母,后面可能跟一个数字。 (例如
x
或x1
) - 系数可以是任何实数。如果为零,则不会显示该术语。 (例如
33x^2+x-10.3
或33x^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中使用了String
对象的match()
方法。
这是我目前尝试过的方法: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']
我目前的解决方案遗漏了什么?
试试这个:polynomial.match(/(\+|\-)?[a-z0-9.^]+/gi);
希望对你有用
您可以将其简化为任何后跟非 +/- 的内容:.[^+-]*