在开始时具有正面观察背景的正则表达式似乎不起作用。有人知道为什么吗?
例如,下面的代码返回null。
const str = "foo:25"
const regex = new RegExp(/^(?<=foo:)\d+/);
console.log(regex.exec(str));
&#13;
编辑:我知道如何让它发挥作用。我问为什么这个特殊的正则表达式并不匹配。
答案 0 :(得分:2)
^
应该在foo
之前。例如:
const str = "foo:25"
const regex = new RegExp(/(?<=^foo:)\d+/);
console.log(regex.exec(str));
答案 1 :(得分:2)
^(?<=foo:)\d+
模式的问题是^
匹配字符串的开头而(?<=foo)
lookbehind在匹配失败时如果没有foo
紧靠左边的那么当前位置 - 并且在字符串开头之前没有文本。
您可以将其修复为
const regex = new RegExp(/(?<=^foo:)\d+/);
此处,(?<=^foo:)
在字符串开头检查foo
,但测试字符串中的每个位置,因为^
不再是消费<的一部分/ em>模式。
在JS中,为了更好地跨浏览器进行移植,你最好使用捕获组而不是积极的lookbehind(并且,你也可以直接使用正则表达式文字表示法,不需要使用/.../
和构造函数表示法):
var str = "foo:25"
var regex = /^foo:(\d+)/;
console.log(regex.exec(str)[1]);