【问题标题】:Safari evaluates false if statementSafari 评估 false if 语句
【发布时间】: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 中是 (?&lt;= supported 吗?
  • @Thefourthbird 对不起,我忘了加!

标签: javascript regex if-statement safari try-catch


【解决方案1】:

Safari 不支持(?&lt;=,(.*)),请参阅Can I Use - JS Lookbehind

【讨论】:

    【解决方案2】:

    由于我之前的答案在没有通知的情况下被删除,我将重新发布我的解决方案,因为我遇到了同样的问题,我相信将来会有很多人: 使用new RegExp 定义正则表达式可以让您捕获错误。像

    try {
    regexes = {
            numbersAndFirst: new RegExp("^0*(?=.)|[^\d|,]|(?<=,(.*)),|(?<=,.*0)0*$","g")
        }
    } catch(err) {
    // safari alternative here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      相关资源
      最近更新 更多