正则表达式:使用具有正向外观的锚点

时间:2018-04-10 06:32:51

标签: javascript regex lookbehind

在开始时具有正面观察背景的正则表达式似乎不起作用。有人知道为什么吗?

例如,下面的代码返回null。



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

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

2 个答案:

答案 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]);