为什么正则表达式模式在 Java、JavaScript 等某些语言中有效,但在 Python 和 Regex101 中失败?

问题描述 投票:0回答:1

我有一个正则表达式模式

^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}
。它在 Java 和浏览器控制台中验证了,但在 Python 中失败了。各种在线正则表达式测试程序产生了不同的结果。 Regex101 在 JavaScript 中显示此模式的错误,但它使用 new RegExp() 构造函数在 JavaScript 代码中正确执行。其他正则表达式测试程序没有显示任何错误。我很好奇同一正则表达式模式的不同行为。

我打算以正则表达式的形式收集用户输入,在前端验证它,然后向后端发送请求。 在 JS 中使用以下代码验证正则表达式 -

isValidRegex(regex) {
      try {
        regex = regex.replace(/^\/|\/[gimuy]*$/g, '')
        new RegExp(regex)
        return true
      } catch (e) {
        console.log(e)
        return false
      }
    },

我也在浏览器控制台、JS脚本、Java编译器和Python编译器上尝试过。 我了解不同语言中不同的正则表达式引擎编译,但我对 JS behvaiour 感到困惑。在 regex101 网站中,它抛出 JS 错误 -

  • 您无法使用速记转义序列创建范围

但是使用 new RegExp() 构造函数时,相同的正则表达式模式在 JS 脚本中得到了验证。

javascript regex regex-group pcre
1个回答
0
投票

将字符串表达式传递给 RegExp 构造函数时,需要转义反斜杠:

console.log(new RegExp('\w').test('2'));    // false
console.log(new RegExp('\\w').test('2'));   // true

© www.soinside.com 2019 - 2024. All rights reserved.