我目前正在使用以下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"
等。
答案 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
等等在第二组括号中。)