2017-04-01 3 views
0

a = "1+2-3*4/5+(6+7^2)" 純粋な数字を取得したいが、2番目の数字は含まない。 2番目の数字は指数なので、修正されました。私はそれを望んでいない。 私は正規表現を書いた。 var myRegx = (?<=[\+\-\*\/\(\^])\d+ JSは、ルックバックをサポートしていません。js正規表現は、これを実装する方法をサポートしていませんか?

誰が私を助けることができますか? var r = a.match(yourRegx) 私は3つの別々の機能にこれを壊すのget => [1,2,3,4,5,6,7]

+0

あなたは、いくつかの追加のサンプル入力を表示する[編集]あなたの質問を喜ばせることはできますか?例えば、 '^'はどこにでも現れることができますか?または複数の '^'がありますか? – nnnnnn

答えて

0

をしたいです。最初に指数を置き換え、2番目の文字列から数値を取得します。最後にすべての文字列を数字にマップします。一致がない場合は、一致を使用して

const a = '1+2-3*4/5+(6+7^2)' 
 
const r = a.replace(/\^\d+/g).match(/\d+/g).map(Number) 
 

 
console.log(r)

は空の配列を返さないの欠陥を持っているので、あなたは、文字列内の任意の番号を持っていない場合は、上記のコードはエラーをスローします。型の安全性とエラー処理が必要な場合は、このような機能パターンを使用できます。

const a = '1+2-3*4/5+(6+7^2)' 
 
const b = 'word' 
 

 
const extractNumbers = x => 
 
    [x].map(x => x.replace(/\^\d+/g)) 
 
    .map(x => x.match(/\d+/g)) 
 
    .map(x => x != null ? x.map(Number) : x) 
 
    .pop() 
 

 
console.log(extractNumbers(a)) 
 
console.log(extractNumbers(b))

+0

おそらく '/ \^\ d +/g 'でなければなりません。 – nnnnnn

+0

ありがとうございます。 – Calx

関連する問題