这是一个示例字符串
var s = "some text 123 [Price $20.99] some other text";
我想获取方括号中包含的任何数值以及小数点。
我试过的是
s.match(/\d+.\d+/);
结果是 123, 20.99 但我不希望它获取括号外的数字
谁能告诉我我做错了什么?
这是一个示例字符串
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"
让我与您一起了解正则表达式:
\[
文字方括号.*?
除换行符外的任何字符,零次或多次,非贪婪(
开始捕获\d+
数,一次或多次\.
字面点\d+
数,一次或多次)
结束捕获.*?
除换行符外的任何字符,零次或多次,非贪婪\]
文字方括号你得到一个数组作为回报。数组元素0
将再次是整个匹配,数组元素1
是第一次捕获的内容。
我让这个工作
s.match(/\[*(\d+.\d+)\]/)[1]