我有元素的标识符,如下所示:
form_book_1_2_3
我想要的是用其他值替换该标识符中的第二个数字。我将函数“match”与以下正则表达式一起使用:
var regexp = /\d_(\d)_\d/;
但它返回我包含的数组
[1_2_3, 2]
因此,当我尝试使用函数“替换”时,它实际上替换“1_2_3”字符串,而不仅仅是“2”。我不明白如何指向替换函数中的第二个匹配元素。或者我的正则表达式可能是错误的?
The replace https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace函数将替换整个匹配的字符串,而不仅仅是特定的捕获组。简单的解决方案是捕获您需要的字符串部分don't想要修改并将它们用作替换模式中的引用,例如:
"form_book_1_2_3".replace(/(\d)_\d_(\d)/, "$1_X_$2"); // "form_book_1_X_3"
作为参考,替换模式的完整语法是(来自 MDN):
-
$$
— 插入“$”。
-
$&
— 插入匹配的子字符串。
-
$`
— 插入匹配子字符串之前的字符串部分。
-
$'
— 插入匹配子字符串后面的字符串部分。
-
$n
or $nn
- 在哪里n or nn是十进制数字,插入第 n 个带括号的子匹配字符串,前提是第一个参数是RegExp
object.
或者,您可以使用函数来实现相同的目标,如下所示:
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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)