我正在尝试捕捉1到2条信息。当使用regexr时,它显示我的表达式正在正常工作,并按应有的方式捕获,但在运行它时,它只从单个字符串(与regexr中相同的数据上)捕获,并为其余的字符串返回null。
我已经尝试构建表达式这里
当切换到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,则只有数字。
发布于 2015-10-20 12:59:44
不要注意JS的regex101上的突出显示组:如果您在右侧的MATCH信息窗格中看到它们,则它们将被正确匹配和捕获。
在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/>");
}
关于regex本身的说明:
^ -在行的开头开始匹配(由于m修饰符)(?:<@([A-Z0-9]+)>)? -可选的(由于?量词)组匹配<@ -文字<@符号([A-Z0-9]+) -(捕获组1) 1或更多字母数字符号> -关闭角托架
.* -0或更多字符,而不是换行符(尽可能多)\b([0-9]+) -(捕获组2) 1或更多以单词边界为前面的数字您可以根据需要调整正则表达式。现在,它将匹配ID (=可选<@...>中的符号)和一行上的最后一个数字序列。如果您需要第一个数字序列,请使用延迟匹配的.*?而不是贪婪的数字序列(.*)。
https://stackoverflow.com/questions/33236949
复制相似问题