2016-11-28 1 views
1

В настоящее время у меня есть идентификатор, как это: s2id_past_example_lashing_guidances_41_commodity_idЗаменить номер документа с регулярными выражениями

Теперь я хочу, чтобы заменить номер после фразы guidances_ с собой + 1. В этом случае, я хочу s2id_past_example_lashing_guidances_41_commodity_id ->s2id_past_example_lashing_guidances_42_commodity_id

Я попробовал (s2\w*_)(\d+)(\w*_id) на regex101.com, и я застрял здесь. Любая помощь будет оценена по достоинству. Заранее спасибо.

+2

?? ваше регулярное выражение работает. и замена должна быть выполнена в вашей программе. Regex cant add/count – Fallenhero

+0

Номер, который вы ищете, находится в группе 2. – raphael75

ответ

3

Если вы не хотите использовать какую-либо группу, и только соответствовать правильный ID:

\d+(?=_[A-Za-z]+_id$) 

Вот example. Он использует положительный результат, чтобы найти только номер, который находится прямо перед _someword_id.

Это делает его легче заменить:

var str = "s2id_past_example_lashing_guidances_41_commodity_id"; 
 
var new_str = str.replace(/\d+(?=_[A-Za-z]+_id$)/, function($0) { 
 
    return Number($0)+1; 
 
}); 
 
console.log(new_str);

+0

Благодарим за помощь. Однако регулярное выражение, которое вы мне отправили, также попытается заменить руководство по деталям, и это не моя цель. Я просто хочу заменить номер после него. Не могли бы вы дважды проверить это? –

+1

Обновлено. Теперь он должен работать нормально. –

+0

спасибо. Теперь он работает безупречно. Удачного дня. :) –

1

Используйте следующий подход с String.replace функции:

var id_value = 's2id_past_example_lashing_guidances_41_commodity_id', 
 
    replaced = id_value.replace(/(guidances_)(\d+)(?=_)/g, function ($m0, $m1, $m2) { 
 
     return $m1 + (parseInt($m2) + 1); 
 
    }); 
 

 
console.log(replaced);

+0

Благодарим вас за помощь, но, пожалуйста, см. Мой комментарий выше. –

+0

работает в соответствии с вашим первоначальным требованием. * Я хочу s2id_past_example_lashing_guidances_41_commodity_id -> s2id_past_example_lashing_guidances_42_commodity_id * – RomanPerekhrest

2

Поскольку регулярное выражение вы уже используете работы, только необходимая часть кода является метод обратного вызова:

var s = "s2id_past_example_lashing_guidances_41_commodity_id"; 
 
var res = s.replace(/(s2\w*_)(\d+)(\w*_id)/, function($0,$1,$2,$3) { 
 
    return $1+(Number($2)+1)+$3; 
 
}); 
 
console.log(res);

Номер, который вы хотите увеличить в 2-й группе, так $2 отливают на число и приращение.

+0

Благодарим за помощь. Тем не менее, когда я попробовал ваше решение и @RomanPerekhrest, я получил это вместо s2id_past_example_lashing_guidances_411_commodity_id –

+0

Это странно. Оба примера должны работать. Вы забыли преобразовать в число с «Number ($ 2)»? –

+0

@ ĐỗTiến: Какой браузер вы используете? Попробуйте 'parseInt ($ 2, 10) + 1' –

Смежные вопросы