#javascript #regex
#javascript #регулярное выражение
Вопрос:
У меня есть список пользователей, и есть дублирующее действие для дублирования выбранного пользователя путем добавления суффикса 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.
Мне нужно заменить только последнее значение, нужно изменить регулярное выражение, я думаю, любая помощь по этому поводу?
Комментарии:
1. Как мы узнаем, когда мы на самом деле столкнулись с именем пользователя? Как мы узнаем, сколько строк
copy
может присутствовать?2. используется
userName.replace(/.*b(d )/g, ...
для получения последнего номера3. @anubhava Но здесь нам понадобится замена регулярного выражения обратного вызова, чтобы также выполнить приращение
:-)
4. @TimBiegeleisen, я создаю нового пользователя с повторяющимся именем пользователя и отправляю его в объект users.
Ответ №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. и пользователи также могут называть себя «Copy», а затем ваш код прерывается.