首页 > 解决方案 > 匹配除第一个之外的所有字符实例,无需后视

问题描述

我正在努力解决这个在 Safari 中无法正常工作的简单正则表达式:

(?<=\?.*)\?

它应该匹配每个?,除了第一个。

我知道lookbehind 还不能在 Safari 上运行,但我需要找到一些解决方法。有什么建议么?

标签: javascriptregexsafarilookbehind

解决方案


您可以使用交替捕获,直到第一次出现问号。在替换中再次使用该组以使其保持不变。

在交替的第二部分,匹配一个要替换的问号。

const regex = /^([^?]*\?)|\?/g;
const s = "test ? test ? test ?? test /";
console.log(s.replace(regex, (m, g1) => g1 ? g1 : "[REPLACE]"));


推荐阅读