我有字符串变量,包含以下文字:
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及其对后视镜头的支持成为可能。
答案 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
)或字符串中的反斜杠转义。