JS用正则表达式替换数字

Tam*_*ara 2 javascript regex

我有一个元素的标识符,如下所示:

form_book_1_2_3
Run Code Online (Sandbox Code Playgroud)

我想要的是用其他值替换此标识符中的第二个数字.我使用函数'match'和以下正则表达式:

 var regexp = /\d_(\d)_\d/;
Run Code Online (Sandbox Code Playgroud)

但它返回包含的数组

[1_2_3, 2]
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试使用'replace'函数时,它实际上会替换'1_2_3'字符串而不是'2'.我不明白如何指向替换函数中的第二个匹配元素.或者也许我的正则表达式错了?

p.s*_*w.g 5

replace函数将替换整个匹配的字符串,而不仅仅是特定的捕获组.最简单的办法是捕捉你的字符串部分想要修改,并利用它们作为置换方式引用,例如:

"form_book_1_2_3".replace(/(\d)_\d_(\d)/, "$1_X_$2"); // "form_book_1_X_3"
Run Code Online (Sandbox Code Playgroud)

作为参考,替换模式的完整语法是(来自MDN):

  • $$ - 插入"$".
  • $& - 插入匹配的子字符串.
  • $` - 插入匹配子字符串之前的字符串部分.
  • $' - 插入匹配子字符串后面的字符串部分.
  • $n或- 如果nnn是十进制数字,则插入第n个带括号的子匹配字符串,前提是第一个参数是一个对象.$nnRegExp

或者,您可以使用函数来实现相同的目标,如下所示:

var replacer = function(match, a, b) { return a + "_X_" + b; };
"form_book_1_2_3".replace(/(\d)_\d_(\d)/, replacer); // "form_book_1_X_3"
Run Code Online (Sandbox Code Playgroud)