RegEx用于填充字符串

时间:2013-03-12 08:27:22

标签: javascript regex extendscript

我有以下输入:

123456_r.xyz
12345_32423_131.xyz
1235.xyz
237213_21_mmm.xyz

现在我需要将第一个连接的数字填充到8个前面带0的数字:

00123456_r.xyz
00012345_32423_131.xyz
00001235.xyz
00237213_21_mmm.xyz

我尝试分割一个点,然后在下划线处拆分(如果存在)并获取第一个数字并填充它们。

但是我觉得只有一个函数才能有一个更有效的正则表达式替换函数,对吗?这看起来怎么样?

TIA 马特

3 个答案:

答案 0 :(得分:4)

我会使用正则表达式,但只是为了拆分:

 var input = "12345_32423_131.xyz";
 var output = "00000000".slice(input.split(/_|\./)[0].length)+input;

结果:"00012345_32423_131.xyz"

编辑:

我在评论中提出的快速,无分裂但无正则表达式的解决方案:

"00000000".slice(Math.min(input.indexOf('_'), input.indexOf('.'))+1)+input

答案 1 :(得分:2)

我根本不会分裂,只需替换:

"123456_r.xyz\n12345_32423_131.xyz\n1235.xyz\n237213_21_mmm.xyz".replace(/^[0-9]+/mg, function(a) {return '00000000'.slice(0, 8-a.length)+a})

答案 2 :(得分:2)

有一个简单的正则表达式可以找到要替换的字符串部分,但是您需要使用a replace function来执行所需的操作。

// The array with your strings
var strings = [
    '123456_r.xyz',
    '12345_32423_131.xyz',
    '1235.xyz',
    '237213_21_mmm.xyz'
];

// A function that takes a string and a desired length
function addLeadingZeros(string, desiredLength){
    // ...and, while the length of the string is less than desired..
    while(string.length < desiredLength){
        // ...replaces is it with '0' plus itself
        string = '0' + string;
    }

    // And returns that string
    return string;
}

// So for each items in 'strings'...
for(var i = 0; i < strings.length; ++i){
    // ...replace any instance of the regex (1 or more (+) integers (\d) at the start (^))...
    strings[i] = strings[i].replace(/^\d+/, function replace(capturedIntegers){
        // ...with the function defined above, specifying 8 as our desired length.
        return addLeadingZeros(capturedIntegers, 8);
    });
};

// Output to screen!
document.write(JSON.toString(strings));