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


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

str.replace(regex, 1);

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

Answers:


140
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);

1
或使用函数:'asd-0.testing'.replace(/(asd-)\ d(\。\ w +)/,function(mystring,arg1,arg2){return arg1 +'mynumber'+ arg2})
伊万好评

1
在您不知道正则表达式的结构的地方有没有答案?在这里,您基本上是在创建一个具有两个匹配项的新正则表达式
Martin Massera '16

这是好事,知道你需要围绕要为$ 1,$ 2等部分括号()
巴斯Slagter

57

使用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'代替子字符串,而不是用子字符串替换整个字符串
dave

24

在您要更换的零件之前和之后,我都会拿到该零件并将其放在任一侧。

喜欢:

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]}`;

5
+1我个人比较喜欢收集火柴。
eduncan911

我同意,在我看来,具有可用的匹配集更具可读性。
特拉维斯J

0

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

var str   = 'asd-0.testing';
var regex = /(asd-)(\d)(\.\w+)/;
var anyNumber = 1;
var res = str.replace(regex, `$1${anyNumber}$3`);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.