如何为长度不确定的参数形成javascript正则表达式
How to form a javascript regex for an undetermined length of parameters
我正试图用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]]]
字符串中不应包含'
符号。如果您想要完全万无一失的解决方案,您需要放弃regexs并使用一些解析器。
使用[^']|(<?''(?:'''')*)'
之类的东西可以解析转义字符串,但js中的正则表达式不支持look-behinds,并且根本不支持AFAIR可变长度look-behinds。
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;
}
http://jsfiddle.net/xmajs/
相关文章:
- 在url参数javascript中存储键值对列表
- 可选参数 JavaScript 技巧
- 如何计算参数 JavaScript 中的条件
- 未定义的变量作为函数参数 javascript
- 使用带有参数 Javascript 的函数更改全局变量
- 如何在参数JavaScript中更改对象属性
- 如何使用参数(javascript)调用Date构造函数
- 作为参数(javascript)传递的函数的系统唯一id
- Backbone.BabySiter内部参数-Javascript Scope
- 未定义函数参数-Javascript
- 谷歌地图api v3-IE7-main.js错误-无效参数(javascript)
- 通过onclick函数发送参数-Javascript
- 传递属于对象的匿名方法作为参数-Javascript
- 未捕获类型错误:没有足够的参数Javascript游戏
- 缺少)参数Javascript错误
- 在函数参数Javascript上使用toSentenceCase
- 跳过函数参数javascript
- 如何在调用不带括号的函数时传递参数 [Javascript]
- 如何传递多个参数javascript
- Foreach键和值输入参数javascript