После того, как каждый символ «n» добавляет пробел, не считайте, если первый символ равен нулю - PullRequest
1 голос
/ 30 сентября 2019

У меня есть этот код в JS. Это меняет мое входное значение. Он удаляет все пробелы, а затем после каждого второго символа добавляет один пустой пробел.

var value = $(input).val().replace(/(\s)/g, '').replace(/(\d{2})/g, '$1 ');

1234 меняется на 12 34 или

1234568790 на 12 34 56 78 90

Этот код работает хорошо. Моя проблема - я не знаю, как исключить ноль, но только если он стоит на первом месте.

Например, я хочу, чтобы это

011111 изменилось на 011 11 1

0000000 изменить на 000 00 00

01234568790 на 012 34 56 78 90

111000 на 11 10 00

012034000 на 012 03 40 00

Ввод может быть длиннее, чем мои примеры. (Я буду использовать больше символов, но пока представьте только цифры)

Как я могу редактировать свое регулярное выражение? (Я знаю как это сделать без регулярных выражений)

Ответы [ 3 ]

3 голосов
/ 30 сентября 2019

Вы можете просто включить альтернативную проверку, если строка начинается с нуля, чтобы разделить после первых 3 цифр, а в противном случае разделить на 2 цифры.

let s = '01234568790';
s = s.replace(/\s/g, '').replace(/(^0\d{2}|\d{2})/g, '$1 ');
console.log(s);
// 012 34 56 87 90
3 голосов
/ 30 сентября 2019

Если вам не нужно проверять строку только для цифр, вы можете использовать

s.replace(/(?:^0)?.{2}(?!$)/g, '$& ')

См. Демоверсию regex .

Подробности

  • (?:^0)? - необязательное вхождение 0 в начале строки
  • .{2} - любое2 символа кроме символов разрыва строки
  • (?!$) - не в конце строки.

$& в строке замены - это полная обратная ссылка на совпадение.

Если вам нужно сначала проверить строку, сделайте это с помощью if (/^\d+$/.test(str)) {...}, а затем примените это регулярное выражение.

JS демо:

var strs = ['1234568790', '012345', '0000000'];
for (var i = 0; i < strs.length; i++) {
  console.log(strs[i].replace(/(?:^0)?\d{2}(?!$)/g, '$& '));
}
1 голос
/ 30 сентября 2019

(0?..)(..)*(.)?

Это регулярное выражение необязательно соответствует 0 во-первых, с еще двумя символами позади него, а затем сопоставляет столько групп длины 2, сколько необходимо, за которым следует необязательное совпадение длины1. Затем можно просмотреть циклы и добавить пробел после каждого.

Попробуйте здесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...