给出以下输入:
123456781234567812345678
我正在努力完成以下任务:
12345678,12345678,12345678
目前,完成此任务的工作如下:
parts = parts.replace(/\B(?=(\d{8})+(?!\d))/g, ",");
我得到的问题是正则表达式从右到左读取。我创建了一个JSFIDDLE来显示问题。我得到的结果是这样的。
123,45678910,12345678
最后,当我使用箭头键移动时,它会将我抛回到输入的末尾。
答案 0 :(得分:8)
您可以使用以下基于负面预测的正则表达式。
alert('123456781234567812345678122'.replace(/(\d{8})(?!$)/g, "$1,"))
alert('123456781234567812345678'.replace(/(\d{8})(?!$)/g, "$1,"))

(\d{8})
捕获每8位数字符,但不记录最后一位字符。 (?!$)
否定前瞻,断言匹配不会跟随行锚的结束。因此,通过将匹配的字符替换为第一组中的当前字符加,
,将为您提供所需的输出。
答案 1 :(得分:6)
使用@Avinash regexp和my answer from this question,您可以使用该代码实现所需目标:
$('.singleSpace').keyup(function() {
var foo = this.value.replace(/\D/g, '').replace(/(\d{8})(?!$)/g, "$1,")
var carretPos = doGetCaretPosition(this)
carretPos += foo.length - this.value.length
this.value = foo;
setSelectionRange(this, carretPos, carretPos)
});
//Code taken from
// https://stackoverflow.com/questions/17858174/set-cursor-to-specific-position-on-specific-line-in-a-textarea
function setSelectionRange(input, selectionStart, selectionEnd) {
if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(selectionStart, selectionEnd);
}
else if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
}
//Code taken from
// https://stackoverflow.com/questions/2897155/get-cursor-position-in-characters-within-a-text-input-field
function doGetCaretPosition (oField) {
// Initialize
var iCaretPos = 0;
// IE Support
if (document.selection) {
// Set focus on the element
oField.focus ();
// To get cursor position, get empty selection range
var oSel = document.selection.createRange ();
// Move selection start to 0 position
oSel.moveStart ('character', -oField.value.length);
// The caret position is selection length
iCaretPos = oSel.text.length;
}
// Firefox support
else if (oField.selectionStart || oField.selectionStart == '0')
iCaretPos = oField.selectionStart;
// Return results
return (iCaretPos);
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="singleSpace" />
&#13;
基本上,使用正则表达式进行更改。在运行正则表达式添加逗号之前,请务必删除每个非数字字符。
然后,您需要使用代码段将插入符替换为替换值时的位置。