2012-02-16 20 views

回答

30

您需要/g修飾符可替換發生:

"a100.dfwe".replace(/[^0-9]+/g, ""); 

我也刪除冗餘i改性劑和未使用的捕獲子表達式括號爲你。正如其他人所指出的那樣,你也可以使用\D來進一步縮短:

"a100.dfwe".replace(/\D+/g, ""); 
+0

謝謝你,究竟是什麼的 「+」 代表什麼? – 2012-02-16 10:57:04

+0

@PrakashRaman:它表示*匹配一個或多個前面的字符*。這不是必需的,但它會通過減少所需替換的次數來略微提高正則表達式的性能。 – 2012-02-16 12:19:29

+0

(技術上此答案,回答了這個問題,但沒有對浮子) 「123.456px」 .replace(/ \ d + /克, 「」); - > 123456 – 2016-05-16 16:48:03

17

\D的意思是「沒有數字」:

"a100.dfwe".replace(/\D/g, "") 
+0

最緊湊的形式。 – Oybek 2012-02-16 10:13:13

1

它不起作用,因爲字符類[^0-9](=重複修飾符+只會匹配一個非數字字符序列,例如「aaa」。

你的目的,使用/g修改爲其他建議(在全球範圍內更換所有的結果),你也可以使用預先定義的字符類\D(=不是一個數字),而不是[^0-9],這將導致更簡潔的正則表達式/\D+/

+0

更好地理解它 應該不是「a」和「.dfwe」來了+組下,因爲這是1等等。 – 2012-02-16 10:59:03

+3

'\ D +'表示「尋找一個或多個非數字」,而'(\ D)+'尋找(相同)非數字的一個或多個重複,這不是你想要的。 現在,無論你做'/ \ D/g'(替換每一個非數字)還是'/ \ D +/g'(替換每一個非數字序列),除了可能的性能除非您處理數以萬計的字符串,否則這些信息不會被察覺。 – fanaugen 2012-02-16 11:15:17

+0

啊非常感謝。這完全解釋了我的事情。謝謝 ! – 2012-02-16 12:03:47

2

什麼負數:

使用安迪E公司的示例工作,除非你有一個負數。然後它會刪除' - '符號,並且還會給您一個總是正數的數字(這可能是正確的)。但是,如果你想保持數小於0,我建議如下:

"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100 

但要小心,因爲這將會使所有的「 - 」符號,給你一個錯誤,如果你的文字看起來像「-A- 100.dfwe」

+0

他並不是真的在談論數字,只是一組數字。無論如何,你的正則表達式仍然匹配'-',因爲它不在字符串的開頭。 – 2016-03-04 16:15:00

0

基於關閉@ user3324764的答案 - 做一個原型功能和數字轉換爲數字。

String.prototype.extractNumber = function() 
{ 
    return Number(this.replace(/(?!-)[^0-9.]/g, "")); 
}; 

例子:

"123.456px".extractNumber(); // 123.456