【发布时间】:2011-12-07 03:23:47
【问题描述】:
从事一个有趣的项目,我在为此编写正则表达式时遇到了一些麻烦。
使用正则表达式和 Javascript,我想将输入字符串拆分为“键”数组。具有无效键的字符串应返回 0 个键(null、空数组,任何都可以)。
“规范”
<input string> => <matches>
# named keys
a => ['a']
b => ['b']
foo[bar] => ['foo', 'bar']
# numeric keys are ok too
a[0] => ['a', '0']
b[1] => ['b', '1']
# 'push' syntax is also valid
push[] => ['push', '']
hello[] => ['hello', '']
# complex!
complex[named][0][] => ['complex', 'named', '0', '']
无效示例
# named keys must start with [a-zA-Z]
_invalid => null
3foo[abc] => null
# named keys can include a number as long as they start with a letter
foo3valid[this_is_valid_2] => ['foo3valid', 'this_is_valid_2']
到目前为止我所拥有的
var regex = /^(?:\[?([a-zA-Z][a-zA-Z0-9_]*|[a-zA-Z0-9_]*)\]?)+$/g;
var keys = [];
myInput.replace(regex, function(match,capture,pos,source){
keys.push(capture);
});
console.log(myInput, keys);
如何失败
我的正则表达式只匹配最后一个“键”,例如,
# should be ['a', 'b', 'c']
a[b][c] => ['c']
在 jsFiddle 上的修补程序
【问题讨论】:
-
我得到 ['c'] 与你的正则表达式反对 'a[b][c]'。
-
@MikePartridge 我添加了一个 jsFiddle 链接。 jsfiddle.net/MVJZc
-
@MikePartridge,我在不同的测试中得到了假阳性结果。你是对的,上面的正则表达式只捕获最后一个键。 (我更新了问题)
标签: javascript regex