我想只替换正则表达式模式匹配的一部分字符串。我找到了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');
}
答案 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
...