2016-04-21 74 views
1

如何從字符串中獲取一組數字?使用javascript RegExp獲取數字,最少2位數,有時3位

例如:

The random number = 0.87934738749 

所有我需要的是0.87沒有變圓,只是截斷。

唯一需要注意的是,我想用RegExp來做到這一點,我知道如何使用Math.pow和Math.floor以及其他方法來做到這一點,我試圖更好地理解正則表達式。

到目前爲止,我已經被引入了令人困惑的例子,RegExp不是我的東西,長度是最少2位數,但在某些情況下,它需要3位數,這就是我忘了添加在我的原來的帖子。

那麼艱難: -

x = String(numb).match(new RegExp("/\d+(\.\d{1,"+p+"})?/"))[0]; 

錯誤Cannot read property '0' of nullnull一回,如果我走了[0]關底。

+0

你是什麼意思「有時3位數」?三位數字的標準是什麼?無論如何,我會親自去做一件簡單的事情:'(?=(\ d + \。\ d {2,3}))'https:// regex101。com/r/wB9fC6/1#javascript – briosheje

+0

在返回null的情況下,你是通過'numb'和'p'傳入的?通常,當您要求我們爲您調試某些內容時,我們需要輸入和預期輸出。 –

+0

0.87或0.879這個標準並不重要,我想了解的是爲什麼新的RegExp是用來做一個正則表達式的,不起作用。 –

回答

0

從上面關於精度(三位數的情況下)的意見,我認爲正確的答案可能是這一個:

var rndm = 0.87934738749; 
var precision = 3; 

x = String(rndm).match(new RegExp("(?=(\\d+\\.\\d{2,"+precision+"}))")); 

alert(x); 

例精度4:https://jsfiddle.net/edz4crc8/

注意,X將(在殼體0.879以上)含有的結果,該正則表達式實際上是:

(?=(\d+\.\d{2,number})) 
  • (=斷言可以匹配正則表達式
  • \ d +匹配一個到無限數字([0-9])
  • 。匹配字面上的.(也可以在需要時添加逗號規則)
  • \ d {2,number}匹配2和之間的任何數字次,其中number是上述情況下變量精度給出的精度。

你的錯誤可能主要是逃避正則表達式本身,但無論如何,在我看來,最好是使用斷言來處理這種情況。

0

這聽起來像它會更簡單的使用toFixed()來實現:

var r = 0.8793... 
var prec = 3 
r.toFixed(prec) // => "0.879" 

但是請注意,這是不完全相同的東西,因爲它涉及四捨五入一個正則表達式會做。例如:

var r = 0.8796... 
r.toFixed(prec) // => "0.880" 

編輯:好吧,誤讀,它說你想圓的部分。漠視。如果有人想四捨五入,我會離開這裏。