我正在尝试使用 javascript 解析这样的字符串:
var mystr = "param1('stringValue'), param2(IntegerValue IntegerValue)";
最后我需要获取每个参数名称(param1 和 param2)和值(一个字符串值或两个整数值)。
但是,原始字符串可以有任意数量的参数,例如:
"param1('stringValue')"
"param1('stringValue'), param2(IntegerValue IntegerValue), param2(IntegerValue IntegerValue)"
要求:
- 每个参数之间有一个逗号,值位于括号内。
- 括号内可以是一个字符串值,也可以是两个中间有空格的整数。
- 可以有任意数量的参数(但至少 1 个)
最佳答案
var str = "param1('stringValue'), param2(1 2), param2(34 555)";
var re = /(\w+)\((?:'([^']+)'|(\d+) (\d+))\)/g;
var a = [], match, value;
while(match = re.exec(str)) {
if (match[2] != null) value = match[2];
else value = [parseInt(match[3]), parseInt(match[4])];
a.push([match[1], value]);
}
a; // [["param1", "stringValue"], ["param2", [1, 2]], ["param2", [34, 555]]]
字符串不应有 '
其中的符号。如果您想要完全万无一失的解决方案,您需要放弃正则表达式并使用一些解析器。
可以使用[^']|(<?\\(?:\\\\)*)'
之类的东西来解析转义字符串。 ,但是js中的正则表达式不支持look-behinds,而且AFAIR变长look-behinds根本不支持。
关于javascript - 如何为不确定长度的参数形成 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931450/