我有一个可以读取此格式的字符串:
Static_1264_1264_11232013_1234
或此格式:
Static_1264__11232013_1234
注意第二个例子只有一个'1264'实例,第二个例子应该是仍有前后下划线的实例。当我保证一个值时,我使用这个正则表达式将字符串拆分为我在其他地方传递的变量:
([^_]+)_([^_]+)_([^_]+)_([^_]+)_([^/]+)
但是当缺少第二个数字时,这看不到匹配。我尝试将非贪婪值添加到第二部分,如下所示:
([^_]+)_([^_]+)_([^_]+?)_([^_]+)_([^/]+)
但这也没有帮助。
答案 0 :(得分:3)
+
表示“匹配前一个元素一次或多次”。如果您想要某些内容是可选的,请改用*
,这意味着“匹配前一个元素零次或多次”:
([^_]+)_([^_]+)_([^_]*)_([^_]+)_([^/]+)
答案 1 :(得分:3)
为什么不使用
var str = 'Static_1264__1264_11232013_1234';
str.match(/([^_]+)/g);
输出:
["Static", "1264", "1264", "11232013", "1234"]