RegExp选择值

时间:2016-12-09 08:00:14

标签: javascript regex node.js

我有字符串变量,包含以下文字:

var val1="GES3 02R202035   ";
var val2=0;
var val3="06              ";
var val4="03.01.11i";
var val5="";

我想使用RegExp从尾随空格中获取值数组和过滤值。

除了尾随空格之外,

/="?([\w\s\.]*)/g有很多帮助,而且我不确定其他可能的字符。 所以我需要像/="?(.*);/g这样的东西,但它也不会删除最后的"和空格。

/="?(.*)"?;/g不会删除最后",谁知道原因?

可以请任何人帮助我吗?

编辑:

预期输出为:

GES3 02R202035
0
06
03.01.11i
and empty string here

编辑:

我需要在javascript(node.js)str.match(/?????/);

中使用它

编辑:在WiktorStribiżew和melpomene的帮助下,我最终来到: (注意在正则表达式中的lookbehind,它将在chrome中工作,仅启用和声标志)

var str =
    'var val1="GES3 02R202035   ";\n' +
    'var val2=0;\n' +
    'var val3="06              ";\n' +
    'var val4="03.01.11i";\n' +
    'var val5="";\n';

console.log('before:\n' + str);

var parts = str.match(/(?<=="?)[^"]*?(?=\s*"?;)/g);
  
console.log('parts\n', parts);

问题with str.match()是它返回匹配数组,我实际上需要组数组。解决方案是安排RegEx完全匹配我需要的结果。最新的V8及其对后视镜头的支持成为可能。

1 个答案:

答案 0 :(得分:1)

var str =
    'var val1="GES3 02R202035   ";\n' +
    'var val2=0;\n' +
    'var val3="06              ";\n' +
    'var val4="03.01.11i";\n' +
    'var val5="";\n';

console.log('before:\n' + str);

var re = /=\s*(?:([-+]?\d+(?:\.\d+)?)|"([^"]*)")/g;

var parts = [];
var m;
while (m = re.exec(str)) {
    var x =
        m[1] !== undefined
            ? Number(m[1])
            : m[2].trim()
    parts.push(x);
}

console.log('parts\n', parts);

此代码提取嵌入的数字和字符串(在=符号后面)。数字(格式为(- | +)? digits (. digits)?,即可选的符号和可选的小数位)被转换为JS数字;字符串的内容被提取和修剪。

它不支持指数表示法(1e2)或字符串中的反斜杠转义。