带双引号正则表达式或验证功能的电子邮件

时间:2014-08-07 15:23:08

标签: regex validation regex-negation regex-lookarounds

由于严格的要求,我在这里遇到了一个非常具有挑战性的正则表达式

我需要创建一个正则表达式或验证函数,使我能够:

  • 用户将在文本字段中输入:

    xxxx”aaaa\”bbbbb\”ccccccc\”ddddd\”eeeeee”yyyyy”ffffff\”ggggg\”hhhh\”iiiii\”jjjj”wwww
    
  • 我需要在这个大字符串中获取所有双引号字符串,我需要将其填满。 (在这种情况下:

    ”aaaa\”bbbbb\”ccccccc\”ddddd\”eeeeee”
    and
    ”ffffff\”ggggg\”hhhh\”iiiii\”jjjj” ) 
    
  • 然后我需要检查所有引号是否正确转义以及是否正在使用某些已定义的字符

    (
      e.g. tis pattern  
    [a-zA-Z0-9!#\$%&'\*\+-/=\?\^_`\{|\}~"\(\),:;<>@\[\\\]] 
    )
    

    我面临的问题是逃脱的报价被转义。然后

  • 在第一步中它返回了我...一个包含6个值的列表

    ”aaaa” , ”ccccccc ”, ”eeeeee”,”ffffff”, “hhhh”, ”jjjj”
    

这不是我需要的。关于这个的任何想法?

2 个答案:

答案 0 :(得分:1)

这是一个使用负面lookbehind的好例子,你可以使用这个正则表达式获得你想要的内容:

”.*?(?<!\\)”

<强> Working demo

使用捕获组,您可以获取这些字符串:

(”.*?(?<!\\)”)

enter image description here

这是比赛

MATCH 1
1.  [4-41]  `”aaaa\”bbbbb\”ccccccc\”ddddd\”eeeeee”`
MATCH 2
1.  [46-80] `”ffffff\”ggggg\”hhhh\”iiiii\”jjjj”`

然后你可以在这个字符串上应用你想要的逻辑。

答案 1 :(得分:1)

如果您使用的是Javascript,它不支持Fede建议的后备广告,那么这就是您想要的:

(".+?(?:[^\\]"))

RegEx Demo

说明:

  • (捕获小组
    • ".+?引用,后跟任意数量的字符
    • (?:非捕获组
      • [^\\]"引号前面没有反斜杠
    • )结束非捕获组
  • )结束捕获组