2017-08-05 9 views
0

多項式表現を含む文字列があります。いくつかの例を怒鳴る与えられている:正規表現を使用してJSの多項式文字列表現を変換する

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

いくつかのことを気づか:

  • 用語は、特定の順序を含んでいません。
  • 不確定性は1つしかなく、小文字の後に数字が続く場合もあります。 (例えば、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'] 

私の現在の解決策では、何が欠けていますか?

+1

あなたは(polynomial.match 'に正規表現を変更した場合どのような/ (\ + | \ - )?[a-z0-9。^] +/gi); '? –

答えて

1

このお試しください:私はあなたがおそらく非+/-続い何にそれを簡素化することができ、それはあなた

+0

よくやったよ! –

2

の作品を願っていpolynomial.match(/(\+|\-)?[a-z0-9.^]+/gi); を:.[^+-]*

+0

ニース!より小さな正規表現に対しては時間の利益がありますか? –

+0

ある意味では、サイズのせいではなく、複雑さのためです。あなたのケースでは、 'A-Z'グループの代わりに大文字と小文字のフラグを無視し、' [+ - ] 'の代わりに'(\ + | \ - ) 'キャプチャグループを使うと少し遅くなるかもしれません。無効なインプットに期待するように機能することが重要です。 – Slai

関連する問題