我有一个字符串,想要在每个第二个字符后添加一个冒号(但不是在最后一个字符之后),例如:
12345678
变为
12:34:56:78
我一直在使用.replace()
,例如:
mystring = mystring.replace(/(.{2})/g, NOT SURE WHAT GOES HERE)
但:
我的正则表达式都没有使用过,而且我还没有在Google上找到任何有用的东西。
有人能指出我正确的方向吗?
答案 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(':')
var mystring = '12345678';
document.write(mystring.match(/.{1,2}/g).join(':'))
&#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'));
这是一个演示