正则表达式只替换匹配的一部分

时间:2016-10-10 03:07:55

标签: javascript regex

我想只替换正则表达式模式匹配的一部分字符串。我找到了this answer,但我没有得到它...... 我如何使用替代?

我想要的例子:保留第一个slug数字,只替换其他数字

/09/small_image/09x/> /09/thumbnail/
第1名:unknown digit
第二名:"small_image"
第3名:unknown digit + "x"

这是我到目前为止所做的:

var regexPattern = /\/\d\/small\_image\/\d*x/;
var regexPattern = /\/\d\/(small\_image\/\d*x)$1/;  ??

var result = regexPattern.test(str);
if (result) {
  str = str.replace(regexPattern, 'thumbnail');
}

2 个答案:

答案 0 :(得分:10)



var input = "/09/small_image/09x/";
var output = input.replace(/(\/\d+\/)small_image\/\d*x/, "$1thumbnail");
console.log(output);




说明:

将您想要保留的部分放在括号中,然后在替换字符串中将其引用为$1 - 不要放置{{ 1}}在你的正则表达式中。因此$1表示匹配正斜杠后跟一个或多个数字,后跟另一个正斜杠。

(请注意,您不需要在正则表达式中删除下划线。)

答案 1 :(得分:0)

使用

var regexPattern = /(\/\d+\/)small\_image\/\d*x/;

str = str.replace(regexPattern, '$1thumbnail');

首先,您错过了+。由于09是两位数,因此您需要正则表达式匹配一个或多个数字(\ḑ恰好是一个数字)。这是由\d+完成的 第二,首先删除您匹配的所有内容。要在之后恢复/09/部分,您必须将其记在正则表达式( ... )的括号中,然后通过{{1}替换它}
也可以创建其他组并通过$1$2 ...

引用它们