2011-10-21 49 views
5

我要的只是去掉一個字符串中的所有數字。簡單的JavaScript正則表達式去除條形碼

所以

var foo = "bar01"; 
alert(foo.replace(/\d/,'')); 

,因爲我只指定一個數字,這顯然給了 「BAR1」。那麼,爲什麼不這項工作:

var foo = "bar01"; 
alert(foo.replace(/\d*/,'')); 

其中給出 「bar01」

+0

已經找到了答案,這是'.'而不是'*' – jdborg

+0

不幸的不是。你所提到的將在特定的「bar01」情況下工作,因爲你說匹配一個數字後面跟着任何字符。這不會刪除字符串末尾的數字,或者最多超過2位等。請參閱其他解決方案以獲得更好的解決方案。 – GregL

回答

12

您必須添加global選項

var foo = "bar01"; 
alert(foo.replace(/\d/g,'')); 

顯然,你甚至可以做這樣的事情

var foo = "bar01"; 
alert(foo.replace(/\d+/g,'')); 

但我不知道它會不會更快(並且最終速度的差異將會是非常非常非常小,除非你解析兆字節的文本)

如果你想測試http://jsperf.com/replace-digits第二個似乎是更快的10位數字和大文本的「斑點」。

+0

不知道它是更快還是更慢,但使用正則表達式的'/ \ d +/g'會更有意義。 – GregL

+0

@GregL最後,如果您要刪除所有數字,第一個數字會更有意義。首先,您要一次刪除所有數字,第二次您要搜索數字(一位或多位數字)的「斑點」並將其刪除。人類會以第二種方式思考(因爲人類有更多的「全局」觀點),機器就是第一種方式。 – xanatos

+0

哪一個更有意義是一個意見問題,但我只是好奇JS引擎是如何工作的 - 無論是正則表達式引擎一次性替換整個數字塊還是單個數字會更高效。每個JS引擎可能會有所不同。 – GregL

2

你可能想指定g標誌:foo.replace(/\d/g,'')

2
alert(foo.replace(/\d+/g,'')); 
1

嘗試 '全局' 標誌:

foo.replace(/\d*/g,'')