【发布时间】:2021-06-15 13:53:20
【问题描述】:
我正在开发一个项目,我使用正则表达式进行输入格式化。我使用lookbehind,但 safari 不支持它。所以我决定对 safari 使用不同的正则表达式。我检查了浏览器并使用下面的代码决定我应该使用哪个正则表达式。
const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
let regexes
if (!isSafari) {
regexes = {
numbersAndFirst: /^0*(?=.)|[^\d|,]|(?<=,(.*)),|(?<=,.*0)0*$/g,
}
} else {
val = val.split('').reverse().join('')
regexes = {
numbersAndFirst: /^0*(?=0.)|[^\d|,]|,(?=(.*),)|(?=.*)0*$/g,
}
}
但是当这个代码块运行时,safari 会抛出 SyntaxError: Invalid regular expression: invalid group specifier name。我尝试使用try-catch,但结果是一样的。有没有办法解决这个问题?
【问题讨论】:
-
我认为
if (isSafari) {会使用带有后视功能的那个吗? -
@Thefourthbird 不,
isSafari使用负前瞻。 -
如果两个正则表达式应该是等价的,你不应该只使用与所有内容兼容的那个吗?
-
在 Safari 中是
(?<=supported 吗? -
@Thefourthbird 对不起,我忘了加
!
标签: javascript regex if-statement safari try-catch