正则表达式:使用正后视的锚点
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]);
正则表达式锚定到开头似乎不起作用。有人知道为什么吗?
例如下面的代码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]);