如何使用正则表达式取一个字符串的一部分并进行更改

时间:2016-05-24 16:58:19

标签: javascript regex

我想更改一个字符串 - 例如 - 如果它的" Hello999"它应该成为" Hello1000"因此,将数字增加一个,但保留其余部分。我想用正则表达式来做,但我不确定如何只是"采取"字符串中的数字并递增它。 我的代码如下:

function stringNumber(str){
    var string="";
    if (/^.*\w+$/i.test(str)){ 
        //testing if the end is a number,if not Ill add 1, not increment
        string=str+1;
        return string;
    }
    else if (/^.*\w+\d+$/i.test(str)){
        string=0;
        string+=1;
        //thats wrong because I keep adding a 1, not incrementing
        return string;
    }
}
stringNumber('hello999');

更新版本: //不起作用

function stringNumber(str){
 var string="";
 if (/^.*\w+$/i.test(str)){ 
    string=str+1;
    return string;
 }
 else if (/^.*00\d+$/i.test(str)){
    string=str.replace(/0\d+$/, function(n) { return parseInt(n) + 1; });
//trying to keep 1 zero and replace the second zero PLUS the number following with incremented number
    return string;
 }

}
stringNumber("hello00999");

3 个答案:

答案 0 :(得分:2)

使用函数作为.replace()函数的第二个参数:

str.replace(/\d+/, function(match) {
  return Number(match) + 1
})

答案 1 :(得分:2)

连接字符串与递增数字

如果你想实际增加你的数字,你必须使它成为一个真正的数值开始(否则你只是连接你的两个字符串)。

考虑通过Number()函数解析字符串的数字部分,然后在replace()调用中递增:

function stringNumber(str){
     // Replace the number at the end of the string 
     return str.replace(/\d+$/, function(n) { return Number(n) + 1; });
}

如果你想扩展它以处理你的字符串不包含数字的情况,你也可以很容易地完成这个:

function stringNumber(str){
     // Replace the number at the end of the string or append a 1 if no number
     // was found
     return /\d+$/.test(str) ? str.replace(/\d+$/, function(n) { return Number(n) + 1; }) : str + '1';
}

示例



function stringNumber(str) {
  // Replace the number at the end of the string 
  return str.replace(/\d+$/, function(n) { return Number(n) + 1; });
}
console.log(stringNumber('hello999'));




更新:现在使用填充字符串

由于听起来你需要处理填充字符串,你可以通过简单的填充函数和检查一些边缘情况来确定何时需要填充额外的数字:

function stringNumber(str) {
  // Replace the number at the end of the string or add a padded version of your number
  return /\d+$/.test(str) ? str.replace(/\d+$/, function(n) {
      // Determine if we are looking at an edge (i.e. all 9s)
      var rangeToPad = /^9+$/.test(n) ? n.length + 1 : n.length;
      // Pad our result by the specified amount
      return pad(Number(n) + 1, rangeToPad);
    })
    // Or simply add a one to the value (padded by three digits)
    : str + pad(1, 3);
}

function pad(num, size) {
  return ('00000' + num).substr(-size);
}

填充示例



function stringNumber(str) {
  // Replace the number at the end of the string or add a padded version of your number
  return /\d/.test(str) ? str.replace(/\d+$/, function(n) {
      // Determine if we are looking at an edge (i.e. all 9s)
      var rangeToPad = /^9+$/.test(n) ? n.length + 1 : n.length;
      // Pad our result by the specified amount
      return pad(Number(n) + 1, rangeToPad);
    })
    // Or simply add a one to the value (padded by three digits)
    : str + pad(1, 3);
}

function pad(num, size) {
  return ('00000' + num).substr(-size);
}

console.log('hello => ' + stringNumber('hello'));
console.log('hello001 => ' + stringNumber('hello001'));
console.log('hello998 => ' + stringNumber('hello998'));
console.log('hello999 => ' + stringNumber('hello999'));




答案 2 :(得分:1)

只是为了好玩......

function stringNumber(str){
    if (str.match(/\d+/)){
      var t = str.match(/\d+/)[0];
      var n = parseInt(t) + 1;
      return str.replace(/([0]*)(\d+)/, "$1" + n);
    }
    return str+"1";
}
console.log(stringNumber("hello00123")); // hello00124
console.log(stringNumber("hello1236")); // hello1237
console.log(stringNumber("hello00")); // hello01
console.log(stringNumber("hello")); // hello1

虽然简单的任务太长了。无论如何,希望它有所帮助:)

UPDATE :我刚刚意识到如果字符串不包含任何数字,您只需添加1。所以我只是修改了一下。