用整数替换字母并用“ - ”(短划线)

时间:2012-03-09 05:23:43

标签: javascript regex

我目前正在使用以下JavaScript代码:

concatedSubstring.replace(/\//g, '-').replace(/[A-Za-z]/g, function(c){
    return c.toUpperCase().charCodeAt(0)-64; 
});

...以"1234/A""22/B"等格式输入,并输出"1234-1""22-2"等。

也就是说,/变为-,字母变为整数,A = 1,B = 2等。

我想改变这一点,如果输入不包含“/”,输出仍然会在“/”所在的位置插入“ - ”。也就是说,输入"1234A"应输出"1234-1",或"22B"应输出"22-2"等。

3 个答案:

答案 0 :(得分:2)

str = "1234/B"; or str = "1234B";

str.replace(/(\/[A-Z])|([A-Z])/g,"-"+parseInt(str.charCodeAt(str.indexOf(str.match(/[A-Z]/g)))-64))

答案 1 :(得分:2)

以下内容应该适用于包含多个数字/字母模式的输入:

var input = "1234/B 123a 535d";

var replaced = input.replace(/(\d+)(\/?)([A-Za-z])/g, function(m,p1,p2,p3) {
   return p1 + "-" + (p3.toUpperCase().charCodeAt(0)-64);
});

alert(replaced); // "1234-2 123-1 535-4"

正则表达式:

/(\d+)(\/?)([A-Za-z])/g

...将匹配一个或多个数字,后跟一个可选的正斜杠后跟一个字母,捕获每个部分供以后使用。

如果你pass a callback to .replace()那么它将被调用完整匹配的参数(我忽略了你的要求)以及任何子匹配(我使用的)。

答案 2 :(得分:1)

你也可以.replace(/([0-9])([a-zA-Z])/g,"$1-$2"):这会将一个字母旁边的数字转换为numberDASHletter,使用反向引用($1指的是第一组括号中的任何内容,$2等等在第二组括号中。)