2015-11-05 80 views
4

嗨,這是現在工作,但我很困惑,爲什麼。正則表達式和逗號

我學習正則表達式,需要拉出來的數字串像

'Discount 7.5%' should get 7.5 
'Discount 15%' should get 15 
'Discount 10%' should get 10 
'Discount 5%' should get 5 

/\d,?.\d?/ //works 

/\d,?.\d,?/ //doesn't works 

/\d?.\d?/ //doesn't works 

我認爲第二兩個中的一個會的工作可能有人解釋這一點。

+1

** 1。**您應該在\,** 2之前使用\ \ + +來匹配多個數字** 3 **在任何正則表達式中不需要''' – Tushar

+0

定義「不起作用」。 – RobG

+0

[DOT正則表達式]的可能重複(http://stackoverflow.com/questions/3862479/regular-expression-for-dot) – Basilevs

回答

2

快速和骯髒與易於理解正則表達式。

//Let the system to optimize the number parsing for efficiency 
parseFloat(text.replace(/^\D+/, "")); 

演示:http://jsfiddle.net/DerekL/4bnp8381/

+1

也會替換'.'小數點 – Tushar

+2

@Tushar不會的。 –

+0

你也可以省略錨 - '^'[Fiddle](http://jsfiddle.net/tusharj/4bnp8381/1/) – Tushar

-1

您可以使用下面的正則表達式,將匹配一個或多個數字,後面可以跟一個小數點和任意數量的數字:

^Discount\s(\d+(\.\d+)?)%$ 

Regex101

+0

錯過+,'\ d +'? – Tushar

+0

@Tushar感謝您的支持。我沒有足夠的測試。 –

+0

'(\ d +(\。\ d +)?)'好? – Tushar

0

試試這個。使第二部分用點.可選的?

(\d)*(\.\d*)? 
0

如果選中該Regex,這是你需要什麼,所以它會返回只有之前,它是折扣字通過利用的回顧後的浮點數運營商:

(?<=Discount\s)\d+(\.\d+)? 

但問題是,使用PHP(prce)我不能讓它與JavaScript的工作。

編輯: 正如在這裏regex and commas提到的Javascript 支持回顧後發正則表達式所以這裏是我做過什麼來解決它JS Fiddle

var div = document.getElementById('test'); 
 
var text = div.innerHTML; 
 
div.innerHTML = text.replace(/Discount (.*)%/ig,'$1');
<div id="test"> 
 
    Discount 7.5%<br> 
 
    Discount 15%<br> 
 
    discount 10%<br> 
 
    Discount 5.433%<br> 
 
    Fee 11%<br> 
 
    Discount 22.7% 
 
</div>

正如你看到它只有在後面跟着單詞折扣,單詞Fee 11%不匹配

+0

@TimBiegeleisen,對不起,但它是不一樣的 –

+0

我的輸入是非常標準的,但我確實喜歡這個檢查單詞折扣。我試着開始使用替換,但在這樣的事情我不能得到它的工作。 var re = /\d,?.\d?/; var vipextract = re.exec(cusvipdis); var skuextract = re.exec(skutext); –