【问题标题】:increment the copied string number javascript增加复制的字符串编号javascript
【发布时间】:2020-11-24 05:26:41
【问题描述】:

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

因此,如果有 john 用户名,则重复操作将创建 john copy 1,如果现在用户复制此“john copy 1”,则将有“john copy 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 复制它。

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

【问题讨论】:

  • 我们如何知道我们何时真正遇到了用户名?我们如何知道可能存在多少个copy 字符串?
  • 使用userName.replace(/.*\b(\d+)/g, ... 获取最后一个号码
  • @anubhava 但是我们需要一个回调正则表达式替换在这里,也做增量:-)
  • @TimBiegeleisen,我用重复的用户名创建新用户并将其推送到用户对象。

标签: javascript regex


【解决方案1】:

简单的任务可以通过简单的逻辑来解决,例如使用 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。用户也可以将自己命名为“复制”,然后你的代码就会中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2020-11-16
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多