RegEx替换为插入符号

时间:2012-07-20 07:56:39

标签: javascript regex

为什么

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

删除“a”和“b”?我认为它应该只删除“b”因为“a”前面有一个我被[^ \ d]排除的数字。

谁能帮帮我?

4 个答案:

答案 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)。