正则表达式返回括号内浮点数

时间:2013-10-25 05:11:25

标签: javascript

这是一个示例字符串

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

我希望得到方括号中的数字值以及小数点。

我试过的是

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

,结果是123,20.99但我不希望它在括号外取数字

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分: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. \d+数字,一次或多次
  5. \.字面点
  6. \d+数字,一次或多次
  7. )结束捕获
  8. .*?除了换行符之外的任何字符,零次或多次,非贪婪
  9. \]文字方括号
  10. 你得到一个数组作为回报。数组元素0将再次成为整个匹配项,数组元素1是第一次捕获的内容。

答案 1 :(得分:0)

我让这个工作

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