用于返回括号内带有浮点数的数字的正则表达式

Regular expression to return numbers with floating point within parentheses

本文关键字:浮点数 数字 正则表达式 返回 用于      更新时间:2023-09-26

这是一个示例字符串

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

我想获取括在方括号中的任何数值以及小数点。

我尝试的是

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

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

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

欢迎来到正则表达式的世界!

十进制点是正则表达式中的特殊字符,如果要从字面上匹配它,则需要使用反斜杠(')对其进行转义。

这对我有用(从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. ']文字方括号

你得到一个数组作为回报。数组元素0将再次是整个匹配项,数组元素1是第一次捕获的内容。

我让它工作

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