正则表达式:有时候会在下划线上拆分

时间:2013-06-11 19:23:55

标签: regex

我有一个可以读取此格式的字符串:

Static_1264_1264_11232013_1234

或此格式:

Static_1264__11232013_1234

注意第二个例子只有一个'1264'实例,第二个例子应该是仍有前后下划线的实例。当我保证一个值时,我使用这个正则表达式将字符串拆分为我在其他地方传递的变量:

([^_]+)_([^_]+)_([^_]+)_([^_]+)_([^/]+)

但是当缺少第二个数字时,这看不到匹配。我尝试将非贪婪值添加到第二部分,如下所示:

([^_]+)_([^_]+)_([^_]+?)_([^_]+)_([^/]+)

但这也没有帮助。

2 个答案:

答案 0 :(得分:3)

+表示“匹配前一个元素一次或多次”。如果您想要某些内容是可选的,请改用*,这意味着“匹配前一个元素零次或多次”:

([^_]+)_([^_]+)_([^_]*)_([^_]+)_([^/]+)

答案 1 :(得分:3)

为什么不使用

var str = 'Static_1264__1264_11232013_1234';
str.match(/([^_]+)/g);

输出:

["Static", "1264", "1264", "11232013", "1234"]