使用Javascript在每个第二个字符后添加冒号(:)

时间:2015-12-15 03:18:57

标签: javascript regex

我有一个字符串,想要在每个第二个字符后添加一个冒号(但不是在最后一个字符之后),例如:

  

12345678

变为

  

12:34:56:78

我一直在使用.replace(),例如:

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

:我的正则表达式都没有使用过,而且我还没有在Google上找到任何有用的东西。

有人能指出我正确的方向吗?

9 个答案:

答案 0 :(得分:8)

mystring = mystring.replace(/(..)/g, '$1:').slice(0,-1)

立即想到这一点。我只是剥掉了最后一个角色,最后摆脱了冒号。

如果你想将它用于奇数长度的字符串,你只需要使第二个字符可选。像这样:

mystring = mystring.replace(/(..?)/g, '$1:').slice(0,-1)

答案 1 :(得分:6)

无需删除任何尾随冒号:

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

\B匹配零宽度非字边界;换句话说,当它到达字符串的末尾时,它不会匹配(因为它被认为是一个单词边界),因此不会执行替换(因此也没有尾随冒号)。

$&包含匹配的子字符串(因此您不需要使用捕获组)。

答案 2 :(得分:2)

如果您正在寻找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

答案 3 :(得分:1)

mystring = mytring.replace(/(.{2})/g, '\:$1').slice(1)

试试这个

答案 4 :(得分:1)

简单,只需匹配每组最多2个字符,然后使用':'

加入数组
mystring.match(/.{1,2}/g).join(':')

&#13;
&#13;
var mystring = '12345678';

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

不需要切片/修剪。

答案 5 :(得分:1)

如果你调整你要搜索的内容以避免行尾冒号(使用负前瞻性正则表达式),这会更容易

DELIMITER $$
CREATE PROCEDURE Demo(in v_id int)
BEGIN
SELECT name from student where id=v_id;
END $$
DELIMITER ;

答案 6 :(得分:1)

没有正则表达式的方法有点不同可能是Array.prototype.reduce

Array.prototype.reduce.call('12345678', function(acc, item, index){
    return acc += index && index % 2 === 0 ? ':' + item : item;
}, ''); //12:34:56:78

答案 7 :(得分:0)

mystring = mystring.replace(/(.{2})/g, '$1\:')

尝试一下

答案 8 :(得分:0)

我最喜欢我的方法:)

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