我有一个看起来像这样的文件
1234567:abcdefg:X1234567:abcdefg:X1234567:abcdefg:X1234567:abcdefg:X

我需要将每行(X)的结束字符替换为0。这似乎很简单,但是每次我使用regex时,它都是null或regex.replace不是函数。
目前我正则表达式有/.*:.*:(.*)/g

最佳答案

您可以使用否定的字符类和捕获组将格式与冒号匹配,但最后一个字符除外。

^([^:]+:[^:]+:)\S$



^字符串开头
(捕获组1


[^:]+:[^:]+:匹配2次而不是:,然后匹配:使用negated character class

)封闭组
\S匹配非空格字符
$字符串结尾


Regex demo

在替换中,使用捕获组1后跟0

如果最后一个字符不能是冒号,请使用[^\s:]代替\S



const regex = /^([^:]+:[^:]+:)\S$/gm;
const str = `1234567:abcdefg:X
1234567:abcdefg:X
1234567:abcdefg:X
1234567:abcdefg:X`;
const subst = `$10`;
const result = str.replace(regex, subst);

console.log(result);

10-06 09:38