У меня есть строка и я хочу добавить двоеточие после каждого второго символа (но не после последнего набора), например:

12345678

Становится

12 : 34 : 56 : 78

Я использовал .replace(), например:

mystring = mystring.replace(/(.{2})/g, NOT SURE WHAT GOES HERE)

Но ни одно из регулярных выражений для : я не использовал работу, и я не смог найти ничего полезного в Google.

Может кто-нибудь указать мне в правильном направлении?

8
MeltingDog 15 Дек 2015 в 06:18

9 ответов

Лучший ответ
mystring = mystring.replace(/(..)/g, '$1:').slice(0,-1)

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

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

mystring = mystring.replace(/(..?)/g, '$1:').slice(0,-1)
8
Cereal 15 Дек 2015 в 13:10

Несколько иной подход без регулярного выражения мог бы использовать Array.prototype.reduce:

Array.prototype.reduce.call('12345678', function(acc, item, index){
    return acc += index && index % 2 === 0 ? ':' + item : item;
}, ''); //12:34:56:78
2
MinusFour 15 Дек 2015 в 04:04

Без необходимости удалять любые конечные двоеточия:

mystring = mystring.replace(/..\B/g, '$&:')

\B соответствует границе неслова нулевой ширины; другими словами, когда он достигает конца строки, он не будет совпадать (так как это считается границей слова) и, следовательно, не будет выполнять замену (следовательно, также не должно быть конечного двоеточия).

$& содержит соответствующую подстроку (поэтому вам не нужно использовать группу захвата).

7
robertklep 15 Дек 2015 в 13:46

Если вы ищете подход, отличный от RegEx, попробуйте это:

var str = '12345678';
var output = '';
for(var i = 0; i < str.length; i++) {
  output += str.charAt(i);
  if(i % 2 == 1 && i > 0) {
    output += ':';
  }
}
alert(output.substring(0, output.length - 1));

Работающий JSFiddle

2
Raptor 15 Дек 2015 в 03:26
mystring = mytring.replace(/(.{2})/g, '\:$1').slice(1)

Попробуй это

1
bjwzds 15 Дек 2015 в 03:28

Легко, просто сопоставьте каждую группу длиной до 2 символов и присоедините массив к ':'

mystring.match(/.{1,2}/g).join(':')
var mystring = '12345678';

document.write(mystring.match(/.{1,2}/g).join(':'))

Не требуется нарезка / обрезка строк.

1
Phil 15 Дек 2015 в 03:36

Мне больше нравится мой подход :)

function colonizer(strIn){
  var rebuiltString = '';
  strIn.split('').forEach(function(ltr, i){
    (i % 2) ? rebuiltString += ltr + ':' : rebuiltString += ltr;
  });
  return rebuiltString;
}

alert(colonizer('Nicholas Abrams'));

Вот демо

http://codepen.io/anon/pen/BjjNJj

0
Alpha G33k 15 Дек 2015 в 03:49
mystring = mystring.replace(/(.{2})/g, '$1\:')

Попробуйте

0
Evan Trimboli 15 Дек 2015 в 03:24

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

mystring = mystring.replace(/(.{2})(?!$)/g, '\$1:');
1
Bryce Guinta 15 Дек 2015 в 05:04