我有字符串变量,包含以下文本:
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(/??????/);
编辑:在 Wiktor Stribiż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);
str.match() 的问题是它返回匹配数组,而我实际上需要组数组。解决方案是安排正则表达式以完全匹配我需要的结果。最新的 V8 及其对后瞻的支持使这成为可能。
最佳答案
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 数字;字符串的内容被提取和 trim 。
它不支持指数表示法 (1e2
) 或字符串中的反斜杠转义。
关于javascript - 正则表达式选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41055675/