我正在尝试捕获1或2条信息。当使用regexr时,它显示我的表达式正在工作并捕获它应该如此,但在运行它时,它只捕获单个字符串(与regexr中的数据相同)并返回null
以用于其余部分。
我尝试过构建表达式 here
当切换到JS风格时,它会显示捕获组不通过颜色叠加层工作,但它显示它们在侧窗格中正常工作。即使是最简单的捕获组也似乎不起作用。
我错过了什么?
输入是:
<@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,那么只有数字。
答案 0 :(得分:2)
不要注意regex101 for JS上的突出显示组:如果你在右边的 MATCH INFORMATION 窗格中看到它们,它们会被匹配并正确捕获。
在JS中,这里是获取捕获组的代码(请注意m[1]
是第一个捕获组文本,m[2]
是第二组文本等):
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/>");
}
关于正则表达式本身的注释:
^
- 在行首开始匹配(由于m
修饰符)(?:<@([A-Z0-9]+)>)?
- 一个可选的(由于?
量词)组匹配
<@
- 文字<@
符号([A-Z0-9]+)
- (捕获组1)1个或多个字母数字符号>
- 关闭角括号.*
- 除换行符之外的0个或多个字符(尽可能多)\b([0-9]+)
- (捕获组2)以字边界开头的1位或更多位数您可以根据自己的要求调整正则表达式。现在,它将匹配ID(=可选<@...>
内的符号),行上的最后一个数字序列。如果您需要第一个数字序列,请使用延迟匹配.*?
而不是贪婪匹配(.*
)。