我需要将字符串开头的所有字母大写,所有字母之前字符串中出现的第一个数字。
abc123将是ABC123
abc123def将是ABC123def
首先,我找到字符串中第一个数字的索引:
var index = myString.search(/\d/);
然后我有一个for循环,我尝试在该数字之前更改每个字母:
for (var i=0; i<index; i++) {
myString = myString.charAt(i).toUpperCase() + myString.slice(i+1);
}
问题是代码在每个循环中删除了开头的字母。 我怎样才能做得更好?
感谢您的帮助
答案 0 :(得分:1)
您可以使用正则表达式和替换函数:
function replace(text) {
return text.replace(/[a-z]+(?=\d)/i, function(match) {
return match.toUpperCase();
});
}
["abc123", "abc123def", "abcd12efgh34ijkl"].forEach(function(test) {
console.log("'" + test + "' becomes '" + replace(test) + "'");
});
正则表达式/[a-z]+(?=\d)/i
查找第一个字母序列([a-z]+
),后面紧跟一个数字((?=\d)
此处为正前瞻,因此不匹配)
答案 1 :(得分:1)
您可以通过以下代码执行此操作:
var str = "abc23mlk";
var index = str.search(/\d/);
if (index !== -1) {
str = str.slice(0, index).toUpperCase() + str.slice(index);
}
console.log(str);
答案 2 :(得分:1)
您也可以执行类似
的操作var myString = "abc123" var index = myString.search(/\d/); myString = myString.substr(0,index).toUpperCase() + myString.slice(index);