如何测试以确定浏览器是不是支持 JS 正则表达式lookahead/lookbehind?

Posted

技术标签:

【中文标题】如何测试以确定浏览器是不是支持 JS 正则表达式lookahead/lookbehind?【英文标题】:How to test to determine if browser supports JS regex lookahead/lookbehind?如何测试以确定浏览器是否支持 JS 正则表达式lookahead/lookbehind? 【发布时间】:2020-02-20 17:14:07 【问题描述】:

我有一个string.replace() 函数,它使用正则表达式后视。

myString.replace(/(?<!\\)'/gi, '"')

但是,我发现此功能目前对浏览器的支持有限。 https://caniuse.com/#feat=js-regexp-lookbehind

有没有办法使用 javascript 来测试用户的浏览器对该功能的支持?

类似于CSS.supports() 函数?

【问题讨论】:

您应该编写一次正则表达式以获得最大的兼容性。知道浏览器是否支持lookbehinds有什么好处?你打算创建多个正则表达式吗?如果是这样,那么您的备用正则表达式无论如何都是交叉兼容的可能性很高,那么为什么要坚持向后看呢?它只会让人头疼。 很公平。这个问题更多是为了满足我对某人如何管理新 ES 功能集成的好奇心,而不是为特定的生产应用程序寻找解决方案。 【参考方案1】:

这将在 chrome 上返回 true,在 safari 上返回 false,没有任何 SyntaxError:

function supportsRegexLookAheadLookBehind() 
  try 
    return (
      "hibyehihi"
        .replace(new RegExp("(?<=hi)hi", "g"), "hello")
        .replace(new RegExp("hi(?!bye)", "g"), "hey") === "hibyeheyhello"
    );
   catch (error) 
    return false;
  

【讨论】:

以上是关于如何测试以确定浏览器是不是支持 JS 正则表达式lookahead/lookbehind?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 只能输入数字和小数点,小数点后2位,并且支持FF3浏览器,应当怎么些?

正则表达式预测grep中的“not follow by”

如何确定一个数字是不是是正则表达式的素数?

js控制只能输入数字和逗号的正则表达式怎么写?

js正则表达式使用

Java 正则表达式是不是支持排序序列?