正则表达式:使用正后视的锚点

Regex : Using an anchor with positive lookbehind

正则表达式锚定到开头似乎不起作用。有人知道为什么吗?

例如下面的代码returns null.

const str = "foo:25"
const regex = new RegExp(/^(?<=foo:)\d+/);
console.log(regex.exec(str));

编辑:我知道如何让它发挥作用。我在问 为什么 这个特定的正则表达式不匹配。

^ 应该在 foo 之前。例如:

const str = "foo:25"
const regex = new RegExp(/(?<=^foo:)\d+/);
console.log(regex.exec(str));

^(?<=foo:)\d+ 模式的问题是 ^ 匹配字符串的开头,如果 foo 紧靠左侧,则 (?<=foo) 后视匹配失败当前位置 - 并且在字符串开头之前没有文本。

您可以将其修复为

const regex = new RegExp(/(?<=^foo:)\d+/);

这里,(?<=^foo:) lookbehind 在字符串的开头检查 foo,但测试字符串中的每个位置,因为 ^ 不再是 [=34 的一部分=]消费模式。

在 JS 中,为了更好的跨浏览器可移植性,你最好使用捕获组而不是积极的回顾(而且,你可以直接使用正则表达式符号,不需要使用 /.../ with构造函数符号):

var str = "foo:25"
var regex = /^foo:(\d+)/;
console.log(regex.exec(str)[1]);