2012-11-29 67 views
1

我有一個字符串,它看起來像這樣提取分數從字符串

Hey this is my 1.20 string

我想只是從中提取1.20

這樣做的最好方法是什麼?

我已經試過這樣的事情,但我得到的1.20,20價值,而不是僅僅1.20

var query = $(".query_time").html(); 
var matches = query.match(/\d.(\d+)/); 
+0

這不是你問什麼,但我認爲你有在您的正則表達式中的錯誤。 「」匹配除空格之外的所有字符,因此您最終會將「1個人和2個gals」等匹配爲「1個人和2個」。我也會假設你想要小數點是可選的,不是?那麼它應該是「/\d\.?((dd)/」 – AmericanUmlaut

回答

2

the match function結果是一個數組,而不是字符串。所以,簡單地採取

var nb = query.match(/\d.(\d+)/)[0]; 

順便說一句,如果你想擁有更精確的匹配,你也應該逃脫點:

var nb = query.match(/\d\.(\d+)/)[0]; 

或者這個,如果你想接受逗號(取決於語言):

var nb = query.match(/\d[\.,](\d+)/)[0]; 

但確切的正則表達式將根據您的具體需求,當然並匹配任何數字(科學記數法?)我建議你看看at more complex regex

+0

非常感謝你。一旦達到時間限制,我會接受這個答案。 – Jako

+0

這將匹配'嘿,這是我的1!20字符串' – Bruno

+0

@布魯諾我不確定這是問題的確切主題,但我修正了正則表達式更具限制性,請參閱編輯。 –

1

matches的值實際上是[ "1.20", "20" ](這是一個數組)。如果您打印它,它將轉換爲一個字符串,因此1.20,20

String.match返回null或一個匹配數組,其中第一個索引是完全匹配的部分,然後是您想要的任何部分。所以你想要的價值是matches[0]

+2

它應該是匹配[0] - 返回的數組是從0開始的。 – AmericanUmlaut

+0

啊,我明白了,我以爲他只想要數字的小數部分。 – Halcyon

1

請嘗試以下

var nb = query.match(/\d\.\d+/)[0]; // "1.20" 
  • 你需要逃避.,因爲這代表任意字符。
  • 拆卸拍攝組(\ d +)和第二場比賽沒有返回
  • 添加[0]索引檢索匹配
+1

儘管你仍然需要第0個索引。依靠數組到字符串的轉換會在某一天引起你的注意。 – Halcyon

+0

@FritsvanCampen謝謝:) – Bruno