如何为不确定长度的参数形成javascript正则表达式
我试图用javascript解析如下字符串:如何为不确定长度的参数形成javascript正则表达式,javascript,regex,Javascript,Regex,我试图用javascript解析如下字符串: var mystr = "param1('stringValue'), param2(IntegerValue IntegerValue)"; 最后,我需要获取每个参数名(param1和param2)和值(一个字符串值或两个整数值) 但是,原始字符串可以有任意数量的参数,例如: "param1('stringValue')" "param1('stringValue'), param2(IntegerValue IntegerValue), pa
var mystr = "param1('stringValue'), param2(IntegerValue IntegerValue)";
最后,我需要获取每个参数名(param1和param2)和值(一个字符串值或两个整数值)
但是,原始字符串可以有任意数量的参数,例如:
"param1('stringValue')"
"param1('stringValue'), param2(IntegerValue IntegerValue), param2(IntegerValue IntegerValue)"
要求:
“
符号。如果您想要完全万无一失的解决方案,您需要放弃正则表达式并使用一些解析器
解析转义字符串可以使用类似[^']|(
字符串中不应该有“
符号。如果您想要完全安全的解决方案,您需要放弃正则表达式并使用一些解析器
解析转义字符串可以使用类似[^']|(
也许,您可以采用以下想法:为什么要使用正则表达式?在之后拆分,
然后将每个值的替换为”
,并在之后拆分(
然后您可以拥有一个数组,其中每个位置都有参数的名称(param1,param2)和实际参数。或者您可以将字符串格式化为JSON。拆分是可以的,除非字符串参数有一个,
。值不会有一个(,)在它们里面,也许做一些分割魔法会更好。我想这可能更适合正则表达式,但可能不适合。也许,你可以采用这样的想法:为什么正则表达式?在之后分割,
,然后对于每个值,用“
替换”,然后在之后分割(
然后您可以有一个数组,其中每个位置都有参数(param1,param2)的名称和实际参数。或者您可以将字符串格式化为JSON。拆分是可以的,除非字符串参数有一个,
。值不会有(,)在它们中,也许使用一些分割魔法会更好。我想这可能更适合正则表达式,但可能不适合。我如何获得参数名称,如“param1”、“param2”、“param3”?我如何获得参数名称,如“param1”、“param2”、“param3”?
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]]]
function parse( str ) {
var rparse = /([a-zA-Z0-9$_]+)\(|'([^']*)'|(\d+ \d+)/g,
cur, r = [];
while( ( cur = rparse.exec( str ) ) ) {
if( cur[1] ) {
r.push( {name: cur[1] } );
}
else if( cur[2] ) {
r[r.length-1].values = [cur[2]];
}
else if( cur[3] ) {
r[r.length-1].values = cur[3].split(" ").map( Number );
}
}
return r;
}