为什么
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
删除“a”和“b”?我认为它应该只删除“b”因为“a”前面有一个我被[^ \ d]排除的数字。
谁能帮帮我?
答案 0 :(得分:3)
它会删除它们,因为您的角色类[^\d]
表示“任何不是数字的东西”。 ^
表示“不”,\d
表示“数字”。所以你的表达意味着“匹配任何不是数字后跟任何小写字母的东西”,它匹配"ab"
。
要仅删除前面没有数字的小写字母,最简单的方法是使用捕获组:
a = a.replace(/([\d][a-z])[a-z]/g, "$1");
说:匹配一个数字后跟一个小写字母(作为一组),后跟一个小写字母(在组外),并将其替换为该组的内容。如果您要从"c"
移除"1abc"
,请在最后+
之后添加[a-z]
,例如:/([\d][a-z])[a-z]+/g
。
答案 1 :(得分:2)
你的正则表达式是要替换一个非数字的字符,后跟一个没有任何内容的a-z字符,并替换它找到的所有匹配字符。
在你的字符串1ab中,它首先匹配a
不是数字,然后b
作为a-z匹配,所以你的字符串中将留下“1”。
如果你想找一个跟随一个字母的数字并提取它,我会建议:
var match = a.match(/\d[a-z]/);
if (match) {
var result = match[0];
}
答案 2 :(得分:1)
你的正则表达式正如它所说的那样:
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
答案 3 :(得分:0)
你想要的可能是negative lookbehind,换句话说,正则表达式应该是/(?!<\d)[a-z]/g
。这个发现任何(小写)字符前面都没有数字(我猜是你想要的,因为你只想要删除b)。