2016-11-28 322 views
1

ID號,目前我有一個這樣的ID: 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

我在regex101.com上試過(s2\w*_)(\d+)(\w*_id),我在這裏卡住了。任何幫助,將不勝感激。提前致謝。

+2

??你的正則表達式起作用。並且替換必須在您的程序中完成。正則表達式不能添加/計數 – 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

這很奇怪。這兩個例子都應該有效你忘了用數字($ 2)轉換成數字嗎? –

+0

@ĐỗTiến:你正在使用哪種瀏覽器?嘗試'parseInt($ 2,10)+ 1' –