簡體   English   中英

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

[英]Add colon (:) after every 2nd character using Javascript

我有一個字符串,並希望在每個第二個字符后添加一個冒號(但不是在最后一個字符之后),例如:

12345678

12:34:56:78

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

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

但是沒有一個正則表達式:我已經使用過工作,但我還沒有找到任何有用的東西。

誰能指出我正確的方向?

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

這是立刻想到的。 我只是剝掉了最后一個角色,最后擺脫了冒號。

如果你想將它用於奇數長度的字符串,你只需要使第二個字符可選。 像這樣:

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

無需刪除任何尾隨冒號:

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

\\B匹配零寬度非字邊界; 換句話說,當它到達字符串的末尾時,它將不匹配(因為它被認為是一個單詞邊界),因此不會執行替換(因此也沒有尾隨冒號)。

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

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

沒有正則表達式的一種不同的方法可能是使用Array.prototype.reduce

Array.prototype.reduce.call('12345678', function(acc, item, index){
    return acc += index && index % 2 === 0 ? ':' + item : item;
}, ''); //12:34:56:78
mystring = mytring.replace(/(.{2})/g, '\:$1').slice(1)

試試這個

簡單,只需匹配每組最多2個字符,並使用':'加入數組

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

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

不需要字符串切片/修剪。

如果你調整你正在搜索的內容以避免行尾冒號(使用負前瞻正則表達式)會更容易

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

試一試

我最喜歡我的方法:)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM