javascript - 正则表达式 : Using an anchor with positive lookbehind

标签 javascript regex lookbehind

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

例如下面的代码返回 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/

相关文章:

javascript - 同一 URL 上的 Angular UI 路由器默认状态

javascript - str.split(someString).join(someOtherString) 是否等同于替换?

regex - 使用正则表达式解析许可证文件

javascript - js正则表达式转义引号

java - 复杂的lookbehind中的无限量词

javascript - 类型错误 : Unable to get value of the property 'test' : object is null or undefinedundefined

javascript - Chrome 中的 onblur onfocus 无限循环问题

javascript - 使用 Jquery 设置复选框

java - 正则表达式匹配数字或不匹配任何内容