我有一个正则表达式模式
^[\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 脚本中得到了验证。
将字符串表达式传递给 RegExp 构造函数时,需要转义反斜杠:
console.log(new RegExp('\w').test('2')); // false
console.log(new RegExp('\\w').test('2')); // true