2013-10-25 137 views
0

內浮點返回的數值這是一個例子字符串正則表達式的括號

var s = "some text 123 [Price $20.99] some other text"; 

我希望得到任何數值與小數點一起放在方括號內。

我已經試過是

s.match(/\d+.\d+/); 

,結果是123,20.99,但我不希望它來獲取數字括號外

誰能告訴我什麼,我做錯了什麼?

+0

必須去'/ \ [。*(\ d +。\ d +)。* \] /'幾乎不能匹配第一個數字 – megawac

+0

的開始,因爲我得到了這個工作's.match(/ [*(\ d +。\ d +)\] /)[1]' – AZee

回答

1

歡迎的正則表達式的世界!

正則表達式中的小數點是special character,如果您希望按字面順序匹配,則需要使用反斜槓(\)將其轉義。

這對我的作品(在Chrome的JavaScript控制檯):

> var s = "some text 123 [Price $20.99] some other text"; 
> s.match(/\d+\.\d+/)[0]; 
"20.99" 

如果你想專門只在方括號內進行搜索,那麼你需要添加這些呢;方括號也是特殊的,所以需要轉義。此外,如果想要允許括號和數字之間的內容,您還需要特別考慮到這一點。然後,您需要使用捕獲括號,這意味着您需要以與第一個簡單案例略有不同的方式訪問匹配。這個工作對我來說:

> var t = "Some text 123 and decimal number 12.34 and now [in square brackets 56.78] yada yada"; 
> t.match(/\[.*?(\d+\.\d+).*?\]/)[1] 
"56.78" 

讓我穿行在正則表達式與您:

  1. \[字面括號
  2. .*?除換行符,零次或多次,不貪婪
  3. 任何字符
  4. (開始拍攝
  5. \d+編號,一次或多次
  6. \.字面點
  7. \d+數,除了換行符一次或多次
  8. )端捕獲
  9. .*?任何字符,零次或多次,非貪婪
  10. \]字面括號

你得到一個數組作爲回報。數組元素0會再次被整體匹配,數組元素1是第一次捕獲的內容。

+0

不客氣!樂於幫助! :)保持彎曲的正則表達式肌肉!https://xkcd.com/208/ –

0

我得到這個工作

s.match(/\[*(\d+.\d+)\]/)[1]