gpt4 book ai didi

javascript - Regex - 将 C# Regex 转换为 JavaScript Regex 的量词的目标无效

转载 作者:搜寻专家 更新时间:2023-11-01 04:30:25 26 4
gpt4 key购买 nike

我正在尝试转换我从 MSDN sample 中获取的 C# 电子邮件正则表达式

@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@)) (?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$"

是这样的:

^(?(")(".+?"@)|(([0-9a-zA-Z]((\.(?!\.))|[^!#\$%&\s'\*/=\?\^`\{\}\|~])*)(?<=[-+0-9a-zA-Z_])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z]{2,6}))$

但我收到以下错误:

? :限定符的目标无效。

?<= : JavaScript 不支持 Lookbehind

我在转换上述正则表达式时需要帮助

最佳答案

在 .NET 中,此正则表达式必须与 IgnorePatternWhitespaceIgnoreCase 标志一起使用,因为存在阻止匹配的空格。这是一个demo .

你在将正则表达式移植到 JS 时遇到的问题是由于 JS 正则表达式不支持 lookbehinds 和条件。

JS 有一个条件解决方法:.NET (?(")"[^"]*"|\w+) 可以翻译为 (?:(?=")"[^"]*"|(?!")\w+)

lookbehinds 很难转换,但在这里,第一个 lookbehind 似乎不太合适。您正在寻找最接近的未转义双引号集。您可以使用 "[^"\\]*(?:\\.[^"\\]*)*"

第二个回顾只是检查 @ 前面是否有字母或数字字符。处理此问题的最简单方法是将 [a-z0-9] 字符类添加到 @ 符号的左侧并应用 ?此替代项的第一组的量词,使数字或字母出现在 @ 之前,并且单字符用户部分仍会匹配。

所以,你可以使用

/^(?:(?=")("[^"\\]*(?:\\.[^"\\]*)*"@)|(?!")(([0-9a-z]((\.(?!\.))|[-!#$%&'*+\/=?^`{}|~\w])*)?[a-z0-9]@))(?:(?=\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(?!\[)(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$/i

参见 demo (注意我还删除了一些不必要的转义符号)。

关于javascript - Regex - 将 C# Regex 转换为 JavaScript Regex 的量词的目标无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34361257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com