0

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

静态_1264_1264_11232013_1234

或这种格式:

静态_1264__11232013_1234

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

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

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

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

但这也无济于事。

4

2 回答 2

3

+意思是“匹配前一个元素一次或多次”。如果您希望某些内容是可选的,请使用 a*代替,这意味着“匹配前一个元素零次或多次”:

([^_]+)_([^_]+)_([^_]*)_([^_]+)_([^/]+)
于 2013-06-11T19:25:21.597 回答
3

为什么不直接使用

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

输出:

["Static", "1264", "1264", "11232013", "1234"]
于 2013-06-11T19:27:24.453 回答