0

这是一个示例字符串

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

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

我试过的是

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

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

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

4

2 回答 2

1

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

小数点是正则表达式中的特殊字符\,如果要按字面匹配,需要用反斜杠 ( ) 对其进行转义。

这对我有用(来自 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是第一次捕获的内容。

于 2013-10-25T05:40:10.983 回答
0

我让这个工作

s.match(/\[*(\d+.\d+)\]/)[1]
于 2013-10-25T05:34:44.020 回答