我正在尝试捕获 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
Run Code Online (Sandbox Code Playgroud)
输出:
应该是行中的 ID <>(除了@)和最后一组数字,如果没有 ID,则只有数字。
不要注意 regex101 for JS 上的突出显示组:如果您在右侧的“匹配信息”窗格中看到它们,则它们已正确匹配并捕获。
在 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/>");
}Run Code Online (Sandbox Code Playgroud)
关于正则表达式本身的注释:
^- 从行首开始匹配(由于m修饰符)(?:<@([A-Z0-9]+)>)?- 可选(由于?量词)组匹配
<@- 文字<@符号([A-Z0-9]+)-(捕获组 1)1 个或多个字母数字符号>- 右尖括号.*- 0 个或更多除换行符之外的字符(尽可能多)\b([0-9]+)-(捕获组 2)前面有字边界的 1 个或多个数字您可以根据您的要求调整正则表达式。现在,它将匹配 ID(= 可选中的符号<@...>)以及一行中的最后一个数字序列。如果需要第一个数字序列,请使用惰性匹配.*?而不是贪婪匹配 ( .*)。
| 归档时间: |
|
| 查看次数: |
7810 次 |
| 最近记录: |