JavaScript, Regex, добавьте начальный ноль ко всему числу, содержащемуся в строке - PullRequest
2 голосов
/ 22 марта 2012

Этот скрипт на Perl я хочу реализовать в JavaScript ( source ):

s/([0-9]+)/sprintf('%04d',$1)/ge;

Очевидно, sprintf недоступно в JavaScript, но я знаюВы можете создать функцию, которая будет работать непосредственно с номером вопроса, однако в моем случае у меня есть длинная строка, содержащая, возможно, несколько чисел, для преобразования строки, такой как: abc8 23 123 в эту: abc000008 000023 000123 (используя 6 цифр в качестве примера).

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

Я действительно хочу избежать последнего подхода, потому что 1) в данном случае скорость является проблемой, и 2) регулярное выражение, связанное с разбиением строк в нужном месте, кажется более сложным, чем добавление начальных нулей в этой точке.

В конце концов, есть ли другой способ сделать это с помощью регулярного выражения JavaScript?

Ответы [ 3 ]

4 голосов
/ 22 марта 2012

Вы можете использовать регулярное выражение, чтобы найти числа и заменить их значением из функции:

s = s.replace(/\d+/g, function(m){
  return "00000".substr(m.length - 1) + m;
});

Демо: http://jsfiddle.net/Guffa/sEUHY/

2 голосов
/ 22 марта 2012

http://jsfiddle.net/hHfUC/1/

Регулярное выражение довольно просто: достаточно передать исправленные цифры в функцию и вернуть измененное совпадение в качестве замены.

"abc8 23 123".replace(/\d+/g,function(x){ return zeroFill(parseInt(x),6) })

Требуется zeroFill функция

function zeroFill( number, width ){
  if ( number.toString().length >= width )
    return number;
  return ( new Array( width ).join( '0' ) + number.toString() ).substr( -width );
}
0 голосов
/ 09 августа 2018

Или ... yanno ...

("0000"+var).slice(-4); // Normal old JS `0000${var}`.slice(-4); // Sexier JS

Первая оценка приводит нашу переменную var в строковый литерал, добавляя n 0 кон (то есть для значения 123 мы получим "0000123", тогда срез , начинающийся с конца строки (отрицательный модификатор), будет подсчитывать назад n символ (так что «000 0123 » или «0123»).

Прекрасная часть в том, что я могу определить глобальную константу (const ZedsPadBabyZedsPad='00000000000000';), которую затем можно использовать для почти ЛЮБОГО типичногоприложение заполнения, от 5-значного номера изображения (img00011.jpg) до даты (02/01/04) по (военному) времени: (07:00).

Не хотите 0's? s'cool. STRING, детка. `WhatACROCK${'you'}`.slice(-4) // 'ROCKyou'

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