我有一些字符串,我想从中提取数字。字符串可以有多种格式,例如:
something on the wing$(0.55) $0.75 $(0.10)
我希望捕获这些组,以便最终结果是:
我永远不会知道是否会有'$'或者数字是小数还是我需要捕获的数字(即,在这个例子中有3个数字,但可能有4个) 。现在我有([\w\s]*)([\W\d]*)
来捕获字符串和值:
但似乎无法解析个别价值观。
答案 0 :(得分:2)
我应该分裂。
alert('something on the wing$(0.55) $0.75 $(0.10)'.split(/\s*\$\s*/))

答案 1 :(得分:1)
您可以split
使用以下正则表达式:
/\s*\$?(\(?\d*\.?\d+\)?)\s*/
pattern匹配
\$?
- 可选的$
(因为它可能存在或不存在,但我们需要将其从结果中排除)(\(?\d*\.\d+\)?)
- 第1组(捕获的值输出到结果数组split
)匹配可选括号内的浮点值:
\(?
- 可选的(
\d*
- 零个或多个数字\.?
- 可选 .
\d+
- 1+位数\)?
- 可选的)
\s*
- 将匹配零个或多个空格(以便不修剪结果数组的元素)参见JS演示:
var re = /\s*\$?(\(?\d*\.?\d+\)?)\s*/;
var str = 'something on the wing$(0.55) $0.75 $(0.10)';
var res = str.split(re).filter(Boolean); // .filter(Boolean) will remove empty values
document.body.innerHTML = "<pre>" + JSON.stringify(res,0,4) + "</pre>";
答案 2 :(得分:1)
即使没有任何捕获,这很可能会按照您想要的方式完成工作。由于没有捕获括号,它将捕获句子后面的数据,并以数组形式返回。
^[\w\s]+|[\d\.()]+?(?=\s|$)
var r = /^[\w\s]+|[\d\.()]+?(?=\s|$)/g,
s = "something on the wing$(0.55) $0.75 $(0.10) $12.75 €(4.25)",
m = s.match(r);
document.write("<pre>" + JSON.stringify(m, null, 2) + "</pre>");