将字母

时间:2017-10-23 10:00:50

标签: javascript

我需要将字符串开头的所有字母大写,所有字母之前字符串中出现的第一个数字。

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);
}

问题是代码在每个循环中删除了开头的字母。 我怎样才能做得更好?

感谢您的帮助

3 个答案:

答案 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)

您也可以执行类似

的操作
  1. 查找索引,了解您现在的工作方式
  2. 子串和大写
  3. 切片并追加
  4. var myString = "abc123"
    var index = myString.search(/\d/);
    myString = myString.substr(0,index).toUpperCase() + myString.slice(index);