2013-06-11 3 views
0

У меня есть строка, которая может читать либо в формате:Regex: Разделить на подчеркивании, иногда

 
Static_1264_1264_11232013_1234 

или формат:

 
Static_1264__11232013_1234 

Обратите внимание, что второй пример имеет только один экземпляр «1264 ', и там, где должен быть второй, все еще есть pre и post-underscores. Когда я гарантировались значение там я использовал это регулярное выражение для разбиения строки в переменный я прошел в другом месте:

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

Но что не видит матч, когда второй номер отсутствует. Я попытался добавить нежелательное значение ко второму куску, например:

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

Но это тоже не помогло.

ответ

3

+ означает «соответствует предыдущему элементу один или несколько раз». Если вы хотите что-то, чтобы быть необязательными, используйте * вместо что означает «соответствовать предыдущему элементу ноль или более раз»:

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

Удивительный, спасибо. – iYeager

2

Почему бы просто не использовать

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

Выход:

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

Много более чистых. Благодарю. – iYeager

Смежные вопросы