为什么
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
删除“a”和“b”?我认为它应该只删除“b”,因为“a”前面有一个我被 [^\d] 排除的数字。
谁能帮我?
为什么
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");
这就是说:匹配一个数字后跟一个小写字母(作为一个组)后跟一个小写字母(组外),并将其替换为组的内容。如果要从中删除"c"
,请在最后一个 之后"1abc"
添加一个,例如:。+
[a-z]
/([\d][a-z])[a-z]+/g
您的正则表达式说要替换一个不是数字的字符,然后是一个没有任何内容的 az 字符,并替换它找到的所有匹配项。
在您的字符串 1ab 中,它将首先匹配a
as NOT 数字,然后匹配b
as az,因此您的字符串中将留下“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
你想要的可能是一个消极的lookbehind,换句话说,正则表达式应该是/(?!<\d)[a-z]/g
。这会发现任何前面没有数字的(小写)字符(我猜这是你想要的,因为你只希望 b 被删除)。