正则表达式替换为插入符号

RegEx replace with caret

本文关键字:符号 插入 替换 正则表达式      更新时间:2023-12-16

为什么

var a = "1ab";
a = a.replace(/[^'d][a-z]/g, "");

删除"A"和"B"?我认为它应该只删除"b",因为"a"前面有一个我用 [^''d] 排除的数字。

谁能帮助我?

它会删除它们,因为您的字符类[^'d]表示"任何不是数字的东西"。^的意思是"不是",'d的意思是"数字"。所以你的表达式的意思是"匹配任何不是数字后跟任何小写字母的东西",它匹配"ab".

若要仅删除前面没有数字的小写字母,使用捕获组可能最容易执行此操作:

a = a.replace(/(['d][a-z])[a-z]/g, "$1");

也就是说:匹配一个数字,后跟一个小写字母(作为一个组(,后跟一个小写字母(组外(,并将其替换为组的内容。如果要从"1abc"中删除"c",请在最后一个[a-z]后添加一个+,例如:/(['d][a-z])[a-z]+/g

您的正则表达式说替换一个不是数字的字符,后跟一个没有任何东西的 a-z 字符,并替换它找到的所有匹配项。

在你的字符串 1ab 中,它将首先将a匹配为不是数字,然后将b匹配为 a-z,因此您的字符串中将留下"1"。

如果你想找到一个数字后面跟一个字母并提取它,我会建议这个:

var match = a.match(/'d[a-z]/);
if (match) {
    var result = match[0];
}

您的正则表达式完全按照它所说的去做:

var a = "1ab";
a = a.replace(/[^'d][a-z]/g, "");
...............a....b

它用"替换了ab

如果您只想替换前面没有数字的字母,您可以执行以下操作:

a.replace(/([^'d])[a-z]/g, "$1");
............a.....b   ......a

它用第一个匹配项"a"替换 ab

你想要的很可能是一个负面的回望,换句话说,正则表达式应该是/(?!<'d)[a-z]/g的。这找到任何(小写(字符前面没有数字(我猜这是你想要的,因为你只希望删除 b(。