ChatGPT解决这个技术问题 Extra ChatGPT

如何替换 Javascript 中的正则表达式子字符串匹配?

var str   = 'asd-0.testing';
var regex = /asd-(\d)\.\w+/;

str.replace(regex, 1);

这会将整个字符串 str 替换为 1。我希望它替换匹配的子字符串而不是整个字符串。这在Javascript中可能吗?

仅供参考,所有解决方案都非常复杂。你只是想更换比赛,对吧?无需修改正则表达式的简单方法如下:str.replace(regex, "$`1$'") 参见 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

A
Amarghosh
var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;
str = str.replace(regex, "$11$2");
console.log(str);

或者,如果您确定字符串中不会有任何其他数字:

var str   = 'asd-0.testing';
var regex = /\d/;
str = str.replace(regex, "1");
console.log(str);

或使用函数:'asd-0.testing'.replace(/(asd-)\d(\.\w+)/, function(mystring, arg1, arg2){return arg1 + 'mynumber' + arg2})
有什么你不知道正则表达式结构的答案吗?在这里,您基本上是在创建一个具有两个匹配项的新正则表达式
很高兴知道您需要在您想要的部分周围使用大括号 () 作为 $1、$2 等。
佚名

使用 str.replace(regex, $1);

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

if (str.match(regex)) {
    str = str.replace(regex, "$1" + "1" + "$2");
}

编辑:关于评论的改编


我想用 '1' 替换子字符串,而不是用子字符串替换整个字符串
F
Félix Saparelli

我会在您要更换的零件之前和之后拿到零件,然后将它们放在两边。

喜欢:

var str   = 'asd-0.testing';
var regex = /(asd-)\d(\.\w+)/;

var matches = str.match(regex);

var result = matches[1] + "1" + matches[2];

// With ES6:
var result = `${matches[1]}1${matches[2]}`;

+1 我个人喜欢收集火柴。
我同意,在我看来,提供匹配的集合更具可读性。
L
Lantanios

我认为实现目标的最简单方法是:

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);