Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为不确定长度的参数形成javascript正则表达式_Javascript_Regex - Fatal编程技术网

如何为不确定长度的参数形成javascript正则表达式

如何为不确定长度的参数形成javascript正则表达式,javascript,regex,Javascript,Regex,我试图用javascript解析如下字符串: var mystr = "param1('stringValue'), param2(IntegerValue IntegerValue)"; 最后,我需要获取每个参数名(param1和param2)和值(一个字符串值或两个整数值) 但是,原始字符串可以有任意数量的参数,例如: "param1('stringValue')" "param1('stringValue'), param2(IntegerValue IntegerValue), pa

我试图用javascript解析如下字符串:

var mystr = "param1('stringValue'), param2(IntegerValue IntegerValue)";
最后,我需要获取每个参数名(param1和param2)和值(一个字符串值或两个整数值)

但是,原始字符串可以有任意数量的参数,例如:

"param1('stringValue')"

"param1('stringValue'), param2(IntegerValue IntegerValue), param2(IntegerValue IntegerValue)"
要求:

  • 每个参数之间有一个逗号,值在括号内
  • 括号内可以是一个字符串值,也可以是两个中间有空格的整数
  • 可以有任意数量的参数(但至少1个)
  • 字符串中不应包含
    符号。如果您想要完全万无一失的解决方案,您需要放弃正则表达式并使用一些解析器

    解析转义字符串可以使用类似
    [^']|(
    字符串中不应该有
    符号。如果您想要完全安全的解决方案,您需要放弃正则表达式并使用一些解析器

    解析转义字符串可以使用类似
    [^']|(
    


    也许,您可以采用以下想法:为什么要使用正则表达式?在
    之后拆分,
    然后将每个值的
    替换为
    ,并在
    之后拆分(
    然后您可以拥有一个数组,其中每个位置都有参数的名称(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;
    
    }