首页 > 解决方案 > 增加复制的字符串编号javascript

问题描述

我有用户列表,并且通过添加后缀复制到用户名来复制所选用户的重复操作。

因此,如果有 john 用户名,则重复操作将创建john 副本 1 ,如果现在用户复制此“john 副本 1”,那么将有“john 副本 2”,依此类推。

这是代码,我正在使用

private _getDuplicateUserName(userName: string, suffixIndex): string {
    let _duplicateName;
    if (userName.includes("Copy")) {
        _duplicateName = userName.replace(/(\d+)+/g, (match, number) => {
            const index = parseInt(number, 10) + 1;
            return index.toString();
        });
        // for next iteration if this duplicate name exists
        userName = _duplicateName;
    } else {
        _duplicateName = `${userName} Copy ${suffixIndex}`;
    }
    console.log(_duplicateName);
    const _isSameName = this.users.find((_user: User) => _user.userName === _duplicateName);
    if (_isSameName) {
        return this._getDuplicateUserName(userName, suffixIndex + 1);
    } else {
        return _duplicateName;
    }
}

创建重复的用户名后,我将新用户推送到this.users重复的用户名。

这可行,但问题是如果有用户名john copy 1 copy 1它与john copy 2 copy 2复制它。

我只需要替换最后一个值,我猜需要更改正则表达式,对此有什么帮助吗?

标签: javascriptregex

解决方案


简单的任务可以通过简单的逻辑来解决,例如使用array.length 获取最后一个字符。

var name = 'John';


function changeName(username) {

  if (username.includes('Copy')) {
    const last = username[username.length - 1]

    const count = parseInt(last) //check if valid integer

    if (count) {
      username = username.replace(/.$/, count + 1) //replace last char
    } else {
      username += ' Copy 1';
    }
  } else {

    username += ' Copy 1';
  }

  name = username;

  console.log('name', name);
}

changeName(name)
changeName(name)
changeName(name)
changeName(name)
changeName(name)

免责声明:我认为这不是重复名称的好方法。多人可以复制 John 2,你得到多个 John 3。用户也可以将自己命名为“复制”,然后你的代码就会中断。


推荐阅读