2013-12-03 2 views
0

У меня есть строка цифр, которая должна иметь 9 символов, и у меня есть регулярное выражение, которое заменяет строку той же строкой и некоторыми пробелами; что-то вроде этого:javascript regex when diffrent length of string

TheString = '123456789'; 
TheSpacedString = TheString.replace(/(\d{1})(\d{2})(\d{2})(\d{2})(\d{2})/, '$1 $2 $3 $4 $5'); 
TheSpacedString format is now '1 23 45 67 89' 

Проблема заключается в том, что, когда длина строки не 9, форматирование не работает: например, если у нас есть это:

TheString = '12345'; 
TheSpacedString = TheString.replace(/(\d{1})(\d{2})(\d{2})(\d{2})(\d{2})/, '$1 $2 $3 $4 $5'); 
format should be '1 23 45' 

Но вместо того, строка равна '12345'. В чем проблема с моим регулярным выражением? JsFiddle является here

+1

Ваше регулярное выражение не соответствует - так, конечно, ничего не делает. –

+2

Вы должны добавить подтверждение перед тем, как выполнить свою замену - если вы ожидаете 9 цифр, но не получите 9, это не должно быть ошибкой? – qJake

ответ

4

сделать две последние группы (или сколько вы считаете, должны быть дополнительно) опционально с ?

http://jsfiddle.net/yWSR2/3/

TheSpacedString = TheString.replace(/(\d{1})(\d{2})(\d{2})(\d{2})?(\d{2})?/, '$1 $2 $3 $4 $5'); 
+0

О, вау, спасибо, исправил мой день! Upvoted !! На самом деле, я добавил знак вопроса после каждого блока, и он отлично работает !! – frenchie

+2

Хотя он добавит некоторые конечные пробелы вроде: '' 1 23 45 "' лучше называть '.trim()' после этого. – anubhava

+0

@anubhava: Очень хорошая точка. –