【发布时间】: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