首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript regex捕获组不工作

Javascript regex捕获组不工作
EN

Stack Overflow用户
提问于 2015-10-20 12:40:37
回答 1查看 6.1K关注 0票数 3

我正在尝试捕捉1到2条信息。当使用regexr时,它显示我的表达式正在正常工作,并按应有的方式捕获,但在运行它时,它只从单个字符串(与regexr中相同的数据上)捕获,并为其余的字符串返回null

我已经尝试构建表达式这里

当切换到JS口味时,它显示捕获组不是通过颜色覆盖工作,而是显示它们在侧窗格中正确工作。即使是最简单的捕获组似乎也不起作用。

我遗漏了什么?

投入如下:

代码语言:javascript
复制
<@U0BUPU9QQ> 49
50
<@U0BUPU9QQ>
<@U0BUPU9QQ> noget 49 noget andet tekst 5 40
<@U0BUPU9QQ> noget andet tekst 5 40
<@U0BUPU9QQ|mn> has joined the channel

输出:

应该是<>内的ID (@除外)和行中的最后一组数字,如果没有ID,则只有数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 12:59:44

不要注意JS的regex101上的突出显示组:如果您在右侧的MATCH信息窗格中看到它们,则它们将被正确匹配和捕获。

在JS中,下面是获取捕获组的代码(注意,m[1]是第一个捕获组文本,m[2]是第二个组文本,等等):

代码语言:javascript
复制
var re = /^(?:<@([A-Z0-9]+)>)?.*\b([0-9]+)/gm; 
var str = '<@U0BUPU9QQ> 49\n50\n<@U0BUPU9QQ>\n<@U0BUPU9QQ> noget 49 noget andet tekst 5 40\n<@U0BUPU9QQ> noget andet tekst 5 40\n<@U0BUPU9QQ|mn> has joined the channel';
var m;
 
while ((m = re.exec(str)) !== null) {
    document.write(m[1] + "<br/>" + m[2] + "<br/><br/>");
}

关于regex本身的说明:

  • ^ -在行的开头开始匹配(由于m修饰符)
  • (?:<@([A-Z0-9]+)>)? -可选的(由于?量词)组匹配
    • <@ -文字<@符号
    • ([A-Z0-9]+) -(捕获组1) 1或更多字母数字符号
    • > -关闭角托架

  • .* -0或更多字符,而不是换行符(尽可能多)
  • \b([0-9]+) -(捕获组2) 1或更多以单词边界为前面的数字

您可以根据需要调整正则表达式。现在,它将匹配ID (=可选<@...>中的符号)和一行上的最后一个数字序列。如果您需要第一个数字序列,请使用延迟匹配的.*?而不是贪婪的数字序列(.*)。

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

https://stackoverflow.com/questions/33236949

复制
相关文章

相似问题

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