Javascript 正则表达式捕获组不起作用

标签 javascript regex

我正在 try catch 1 或 2 条信息。当使用 regexr 时,它显示我的表达式正在工作并像它应该的那样捕获,但是当运行它时,它只从单个字符串捕获(在与 regexr 相同的数据上)并返回 null剩下的。

我尝试构建表达式 here

当切换到 JS 风格时,它显示捕获组无法通过颜色叠加层工作,但它显示它们在侧 Pane 中正常工作。即使是最简单的捕获组似乎也不起作用。

我错过了什么?

输入是:

<@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 则只有数字。

最佳答案

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

在 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]+) - (Capture group 2) 1 个或多个以单词边界开头的数字

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

关于Javascript 正则表达式捕获组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33236949/

相关文章:

javascript - 正确结合 javascript 和 php

javascript - 无法读取未定义的属性 'address_1' - React

regex - 替换/删除 datastudio 中第一个 + 字符之后的所有内容

javascript - 使用正则表达式转义某些 html 元素内的引号?

javascript - 如何在jquery中使用替换和正则表达式在大写字符之前插入空格

regex - 从 Red 语言的字符串中删除特殊字符

javascript - 获取 "Unexpected Token Error"

javascript - AJAX无法加载URL

javascript - 使 2 个 div 响应地与其他 2 个 div 重叠

python - Python 中的正则表达式替换会导致出现 ASCII 字符