首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用插入符号替换RegEx

用插入符号替换RegEx
EN

Stack Overflow用户
提问于 2012-07-20 15:56:39
回答 4查看 296关注 0票数 0

为什么

代码语言:javascript
运行
复制
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");

删除"a“和"b"?我认为它应该只删除"b“,因为"a”前面有一个数字,我用^\d排除了这个数字。

有谁能帮帮我呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-20 15:58:02

它删除了它们,因为字符类[^\d]表示“任何不是数字的东西”。^的意思是“不”,\d的意思是“数字”。因此,表达式的意思是“匹配任何不是数字后跟任何小写字母的内容”,这与"ab"匹配。

要仅删除前面没有数字的小写字母,最简单的方法可能是使用捕获组:

代码语言:javascript
运行
复制
a = a.replace(/([\d][a-z])[a-z]/g, "$1");

这就是说:匹配一个数字,后跟一个小写字母(作为一个组),然后再跟一个小写字母(组外),然后只用组的内容替换它。如果您想从"1abc"中删除"c",请在最后一个[a-z]之后添加一个+,例如:/([\d][a-z])[a-z]+/g

票数 3
EN

Stack Overflow用户

发布于 2012-07-20 15:59:29

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

在您的字符串1ab中,它将首先匹配a而不是数字,然后将b匹配为a-z,因此您将在字符串中留下"1“。

如果你想找到一个后面跟着一个字母的数字并提取出来,我建议这样做:

代码语言:javascript
运行
复制
var match = a.match(/\d[a-z]/);
if (match) {
    var result = match[0];
}
票数 2
EN

Stack Overflow用户

发布于 2012-07-20 16:01:46

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

代码语言:javascript
运行
复制
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
...............a....b

它将ab替换为"“

如果只想替换前面没有数字的字母,可以这样做:

代码语言:javascript
运行
复制
a.replace(/([^\d])[a-z]/g, "$1");
............a.....b   ......a

它用第一个匹配的"a“替换ab

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11575159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档