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