变量字符串的正则表达式

时间:2016-04-29 09:56:29

标签: javascript regex

我有一些字符串,我想从中提取数字。字符串可以有多种格式,例如:

something on the wing$(0.55) $0.75 $(0.10)

我希望捕获这些组,以便最终结果是:

  1. 翼上的东西
  2. (0.55)
  3. 0.75
  4. (0.10)
  5. 我永远不会知道是否会有'$'或者数字是小数还是我需要捕获的数字(即,在这个例子中有3个数字,但可能有4个) 。现在我有([\w\s]*)([\W\d]*)来捕获字符串和值:

    1. 翼上的东西
    2. $(0.55)$ 0.75 $(0.10)
    3. 但似乎无法解析个别价值观。

3 个答案:

答案 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|$)

Regular expression visualization

Debuggex Demo

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>");