Javascript 用插入符号替换正则表达式

Javascript 用插入符号替换正则表达式,javascript,regex,Javascript,Regex,为什么 var a = "1ab"; a = a.replace(/[^\d][a-z]/g, ""); 删除“a”和“b”?我认为它应该只删除“b”,因为“a”前面有一个数字,我通过[^\d]排除了这个数字 谁能帮我?它删除它们,因为您的字符类[^\d]表示“任何不是数字的东西”。^表示“不是”,而\d表示“数字”。因此,您的表达式的意思是“匹配任何不是后跟任何小写字母的数字”,它匹配“ab” 要仅删除前面没有数字的小写字母,使用捕获组可能是最简单的方法: a = a.replace(/([

为什么

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
,它会删除它们,因为您的字符类
[^\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];
}

您的正则表达式要求将一个非数字的字符后跟一个a-z的字符替换为零,并替换找到的所有匹配项

在字符串1ab中,它将首先将
a
匹配为非数字,然后将
b
匹配为a-z,因此字符串中将保留“1”

如果你想找到一个数字,后面跟一个字母,并将其提取出来,我建议:

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

你想要的很可能是a,换句话说正则表达式应该是
/(?!你想要的很可能是a,换句话说正则表达式应该是
/(?!你的正则表达式正在做它所说的:

var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
...............a....b
它将ab替换为“”

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

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

它将ab替换为第一个匹配的“a”

您的正则表达式正是按照它所说的做的:

var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
...............a....b
它将ab替换为“”

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

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

它将ab替换为第一个匹配的“a”

Ahhh。明白了!那么表达式是什么:所有字符前面都没有数字?@heinob:我添加了一个表达式来帮助处理
1ab
,但它不像“所有字符前面都没有数字”那样通用啊哈。明白了!那么这个表达式是什么意思:所有字符前面都没有数字?@heinob:我添加了一个表达式来帮助
1ab
,但它不像“所有字符前面都没有数字”那样通用。JavaScript没有它们。(顺便说一句,不是我的dv。)没错,我没有发现它是JS。显而易见的解决方案是使用一个捕获组,人们已经讨论过了。JavaScript没有。(顺便说一句,不是我的dv)。没错,我没有发现它是JS。显而易见的解决方案是使用一个捕获组,人们已经讨论过了。
a=a.match(/[^\d][a-z]/g,”)
试试这个,你会看到你的代码匹配的地方正如你从答案中可以看到的那样,有很多人可以帮助你做到这一点,但你可能想更准确地知道你到底想要什么。有很多方法可以删除b,如果你指定你的规则是什么,哪些东西要保留,哪些东西不能保留,那就好了o discard。谢谢你的建议。我明白你的意思了!在这个特殊情况下,我实际上不明白为什么RegExp会以这种方式运行。当然,这背后有一个编程任务,但它与这个特殊问题无关。我是RegExp的新手,我甚至不知道捕获组的存在。现在我知道:-)
a=a.match(/[^\d][a-z]/g,”)
试试这个,你会看到你的代码匹配的地方正如你从答案中可以看到的那样,有很多人可以帮助你做到这一点,但你可能想更准确地知道你到底想要什么。有很多方法可以删除b,如果你指定你的规则是什么,哪些东西要保留,哪些东西不能保留,那就好了o丢弃。谢谢你的建议。我明白你的意思了!在这种特殊情况下,我实际上不理解为什么RegExp会以这种方式运行。当然,这背后有一个编程任务,但它与这个特殊问题无关。我是RegExp的新手,甚至不知道捕获组的存在。现在我知道:-)