2016-08-02 3 views
2

Я получил это регулярное выражение:Использование регулярных выражений замены при вводе в поле ввода

(/(\d{2})(\d{3})(\d{2})/g; 

То, что я хочу сделать, это заменить каждый 2, когда каждый 3 и когда каждый 2 снова символ с «» время типирование. Это означает, что если я наберу «123», его следует отформатировать до «12 3», и если я наберу «12345», его следует отформатировать до «12 123»

Однако я получаю интервал только после каждых 7 символов. Вот jsfiddle: http://jsfiddle.net/K4WXc/257/

Помощь была бы высоко оценена!

+0

Что должно выводиться для '123456' и' 1234567', '123465789'? – Tushar

+0

Попробуйте ['return v.replace (/ \ d (? = (\ D {3}) + $) |^\ d (? = \ D {2} $)/g," $ & "); '] (http: //jsfiddle.net/xsy4femz/) и сообщите, если это соответствует вашим требованиям. –

+0

@Tushar 'шаблон «xx xxx xx», поэтому, если я нахожу 123456, он должен выглядеть «12 345 6» на входе. 1234567 должно быть «12 345 67», а для 123465789 оно должно быть «12 346 57» (я обновлю свой jsfiddle с максимальным значением 7, поэтому не удастся ввести более длинную строку). – Mojique

ответ

1

Я изменил ваш fiddle, как показано ниже:

return v.replace(/^(\d{2})(\d{1,3})(\d{0,2}).*/, function (match, a, b, c) { 
     return a + ' ' + b + (c == '' ? '' : ' ' + c); 
    }); 

Имея в виду, что как раз перед этим блоком, если вы удалили не-цифры, то этот блок не ожидает, только цифры (без пробелов).

Это соответствует 2 цифры в начале: ^(\d{2})

Тогда 1 до 3 в качестве следующего захвата группы: (\d{1,3})

Если есть 3 в том, что 2-й группы, он будет захватывать до более 2: (\d{0,2})

Все более, чем будет отброшен: .*

важной частью этого, что позволяет ему соответствовать «неполные» записи при вводе в том, что он соответствует даже если вы не набрали все 3 цифры 2-й группы или обе 3-й группы.

ПРИМЕЧАНИЕ: Основная проблема с вашей оригинальной заменой заключалась в отсутствии первого парама, который представляет всю строку с согласованием.

+0

Спасибо за код и объяснение! – Mojique

+0

I изменил код, чтобы принять параметр данных для входного фильтра: http://jsfiddle.net/MrPolywhirl/K4WXc/263/ –

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