为什么
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");删除"a“和"b"?我认为它应该只删除"b“,因为"a”前面有一个数字,我用^\d排除了这个数字。
有谁能帮帮我呢?
发布于 2012-07-20 15:58:02
它删除了它们,因为字符类[^\d]表示“任何不是数字的东西”。^的意思是“不”,\d的意思是“数字”。因此,表达式的意思是“匹配任何不是数字后跟任何小写字母的内容”,这与"ab"匹配。
要仅删除前面没有数字的小写字母,最简单的方法可能是使用捕获组:
a = a.replace(/([\d][a-z])[a-z]/g, "$1");这就是说:匹配一个数字,后跟一个小写字母(作为一个组),然后再跟一个小写字母(组外),然后只用组的内容替换它。如果您想从"1abc"中删除"c",请在最后一个[a-z]之后添加一个+,例如:/([\d][a-z])[a-z]+/g。
发布于 2012-07-20 15:59:29
您的正则表达式要求将后面跟a-z的非数字字符替换为空,并替换找到的所有匹配项。
在您的字符串1ab中,它将首先匹配a而不是数字,然后将b匹配为a-z,因此您将在字符串中留下"1“。
如果你想找到一个后面跟着一个字母的数字并提取出来,我建议这样做:
var match = a.match(/\d[a-z]/);
if (match) {
    var result = match[0];
}发布于 2012-07-20 16:01:46
您的正则表达式完全按照它所说的做:
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
https://stackoverflow.com/questions/11575159
复制相似问题