次のように、フォーマットから正規表現を自動的に構築できます。
var format = 'XX-XX-XX';
var string = '111111';
var regex = '';
for(var i = 1; format.indexOf('X') >= 0; i++){
format = format.replace('X', '$'+i);
regex += '(\\d)'; // to match a digit enclosed in ()
}
または関数として:
function format(string, format){
var regex = '';
for(var i = 1; format.indexOf('X') >= 0; ++i){
format = format.replace('X', '$'+i);
regex += '(\\d)';
}
regex += '[^]*'; // Match the rest of the string to crop characters overflowing the format.
// Remove this ^ line if you want `format('12345678', 'XX/XX/XX')` to return `12/34/5678` instead of `12/34/56`;
return string.replace(new RegExp(regex), format);
}
console.log(format('111111', 'XX-XX-XX')); // 11-11-11
console.log(format('111111', 'XX.XX.XX')); // 11.11.11
console.log(format('1111111', 'XXX-XXXX')); // 111-1111
console.log(format('111111', 'XX-XX-XX')); // 11-11-11
console.log(format('111111', 'XX/XX/XX')); // 11/11/11
console.log(format('123456789', 'XX/XX/XX')); // 12/34/56 (789 are cropped off.)