我找到了this正则表达式的电子邮件。我试着把它变成一个多行版本。但是在我这样做之后它停止工作:
const emailOne = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
const email = RegExp(
/* eslint-disable */
'^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|' +
'(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|' +
'(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
/* eslint-enable */
)
emailOne.test('abc@gmail.com')
emailTwo.test('abc@gmail.com')
emailOne
返回true
。 emailTwo
返回false
。为什么会是这个原因?
修改
我意识到RegExp
会修改原始正则表达式(打破它):
// regex created by RegExp
/^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/
// emailOne
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
答案 0 :(得分:2)
您的第一个正则表达式是使用正则表达式指定的。你的第二个用字符串指定,你忽略了用另一个反斜杠转义反斜杠。 \\