Как посчитать ведущие нули? - PullRequest
1 голос
/ 28 октября 2019

Я пытаюсь создать регулярное выражение для подсчета ведущих нулей в следующих форматах: 01, 001 и 0001.

Это некоторые идентификаторы, которые мне нужно как-то обработать.

Я пытался что-то вроде этого:

id.split(/^0{1,3}/)

Например, если мой ввод 0001, я хотел бы видеть что-то вроде этого:

['0', '0', '0']

НоЯ получаю это:

["", "1"]

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

Ответы [ 3 ]

1 голос
/ 28 октября 2019

Используйте совпадение, чтобы вы могли получить нули. С этим вы можете прочитать длину. Если совпадений нет, возвращается ноль.

var str = "0001"
var match = str.match(/^0+/)
var level = match ? match[0].length : 0

в одну строку

var str = "0001"
var level = (str.match(/^0+/) || [''])[0].length
1 голос
/ 29 октября 2019

String#split разбивает строки на части, где регулярное выражение соответствует части строки. Таким образом, ожидаемые результаты ожидаются: 001 при разбиении на /^0{1,3}/ (первые 1, 2 или 3 нуля) приведет к пустой строке (в начале строки) и 1.

* 1006. * Вы хотите использовать регулярное выражение, которое всегда соответствует любому числу нулей в начале строки:

console.log('001'.match(/^0*/)[0].length); // => 2
console.log('01'.match(/^0*/)[0].length);  // => 1
console.log('1'.match(/^0*/)[0].length);   // => 0

Нет необходимости использовать || или какой-либо другой способ защиты, поскольку /^0*/ всегда соответствует любому количеству нулей (0*) в начале строки(^).

1 голос
/ 28 октября 2019

Вы можете иметь все это без регулярного выражения:

let somenumber = "0001";

function count_leading_zeros(some_input) {
    let splitted = some_input.split("");
    let i = 0;
    while (splitted.shift() == 0) {
        i += 1;
    }
    return i;
}

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