Firefox正则不支持前置断言么?

以下代码:

var exp = /(?<!\$)\$(\d+|\w+?\b)/g;

在 Chrome (Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36) 上面正常运行
在 Firefox (Mozilla/5.0 (Windows NT 10.0; WOW64; rv:62.0) Gecko/20100101 Firefox/62.0)
上面执行,会出现:

SyntaxError: invalid regexp group

我现在降级的解决方案:

let exp = null;
try {
    // firefox make this error
    exp = new RegExp('(?<!\\$)\\$(\\d+|\\w+?\\b)', 'g');
} catch (error) {
    exp = new RegExp('\\$(\\d+|\\w+?\\b)', 'g');
}

/**
 * 格式化输出字符
 * 
 * @param {String} format 格式化字符串
 * @param  {...any} args 
 */
export default function printf(format, ...args) {

    return format.replace(exp, function (target, name) {
        if (args.length === 1 && args[0] instanceof Object) {
            return args[0][name] || target;
        } else {
            return args[name] || target;
        }
    });
}

现在在想,是不是 bug 感觉 Firefox 把前置断言当作组解析了

阅读 5.9k
2 个回答

太难受了,有什么解决方案没有?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题