正则表达式在开头锚定后向后看似乎不起作用。有人知道为什么吗?
例如下面的代码返回 null。
const str = "foo:25"
const regex = new RegExp(/^(?<=foo:)\d+/);
console.log(regex.exec(str));
编辑:我知道如何让它发挥作用。我在问为什么这个特定的正则表达式不匹配。
最佳答案
^(?<=foo:)\d+
的问题模式是^
匹配字符串的开头和 (?<=foo)
如果没有 foo
,lookbehind 匹配失败紧靠当前位置的左侧 - 并且在字符串开头之前没有文本。
您可以将其修复为
const regex = new RegExp(/(?<=^foo:)\d+/);
在这里,(?<=^foo:)
后视检查 foo
在字符串的开头,但测试自 ^
以来字符串中的每个位置不再是消费模式的一部分。
在 JS 中,为了更好的跨浏览器可移植性,你最好使用捕获组而不是正向后视(而且,你可以直接使用正则表达式文字表示法,不需要使用 /.../
和构造函数表示法):
var str = "foo:25"
var regex = /^foo:(\d+)/;
console.log(regex.exec(str)[1]);
关于javascript - 正则表达式 : Using an anchor with positive lookbehind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49746886/