以下代码:
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 把前置断言当作组解析了
不支持,这是最新特性
https://developer.mozilla.org...
根据mdn,目前只有chrome和opera支持前置断言