Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式不匹配序列中的两个相同字符_Javascript_C#_Angularjs_Regex - Fatal编程技术网

Javascript 正则表达式不匹配序列中的两个相同字符

Javascript 正则表达式不匹配序列中的两个相同字符,javascript,c#,angularjs,regex,Javascript,C#,Angularjs,Regex,我知道这对你们来说很简单,但我正在绞尽脑汁寻找正则表达式来匹配下面的字符串。尝试了不同的注册表项,但每次都失败了。下面是需要匹配/不匹配的字符串 S__ATHEESH – not match S_A_T_HEESH – match S’_ATHEESH – match S’’ATHEESH – not match S-A_THEESH - match 这是要求 a. A name can have the special characters – space, apostrop

我知道这对你们来说很简单,但我正在绞尽脑汁寻找正则表达式来匹配下面的字符串。尝试了不同的注册表项,但每次都失败了。下面是需要匹配/不匹配的字符串

S__ATHEESH – not match
S_A_T_HEESH – match 
S’_ATHEESH – match 
S’’ATHEESH – not match
S-A_THEESH - match
这是要求

a.       A name can have the special characters – space, apostrophe, underscore and hyphen. 
b.      There can be more than 1 special character in a name, but same special character cannot repeat more than once continuously. 
c.       There should be minimum 2 characters entered in the name field 
我有以下注册表项,需要修改

^([a-zA-Z]+[ _'-])*[a-zA-Z]+$

感谢您的帮助。

您可以使用基于前瞻性的解决方案,如

/^(?!.*([-_ ’])\1)(?=(?:[^a-z]*[a-z]){2})[-_ ’a-z]+$/i
  • (?!*([-\u'])\ 1)
    检查是否没有双重特殊字符
  • (?=(?:[^a-z]*[a-z]){2}
    检查是否存在至少两个字母
  • 如果只存在允许的字符,则匹配
我在INSTIVE修饰符中使用了case,以避免一直编写
a-zA-Z
。 我不确定
是否是正确的连字符,但它是您使用的字符


这里有一个演示:

您可以使用基于前瞻性的解决方案,如

/^(?!.*([-_ ’])\1)(?=(?:[^a-z]*[a-z]){2})[-_ ’a-z]+$/i
  • (?!*([-\u'])\ 1)
    检查是否没有双重特殊字符
  • (?=(?:[^a-z]*[a-z]){2}
    检查是否存在至少两个字母
  • 如果只存在允许的字符,则匹配
我在INSTIVE修饰符中使用了case,以避免一直编写
a-zA-Z
。 我不确定
是否是正确的连字符,但它是您使用的字符


这里有一个演示:

如果我错了,请纠正我,但您的要求仅适用于不包含两个空格(或撇号、下划线或连字符)的字符串

在AFAICT的RegEx land中,断言“不”并不简单,但要求似乎很简单,可以反过来处理:

(  |__|''|’’)
将匹配您标记为“不匹配”的内容,因此您只需否定布尔匹配结果

祝你好运


编辑:只是为了确保我没有被误解。我并不是说你不能完全按照op的要求去做,我只是说否定这个要求要简单得多,也更容易被其他人维护。

如果我错了,请纠正我,但你的要求只是针对不包含两个空格(或撇号、下划线或连字符)的字符串

在AFAICT的RegEx land中,断言“不”并不简单,但要求似乎很简单,可以反过来处理:

(  |__|''|’’)
将匹配您标记为“不匹配”的内容,因此您只需否定布尔匹配结果

祝你好运


编辑:只是为了确保我没有被误解。我并不是说你不能完全按照op的要求去做,我只是说否定这个要求要简单得多,也更容易被其他人维护。

下面的正则表达式可以满足你的要求:

^(?=.{2})(?:[a-zA-Z]+|([ _’'-])(?!\1))+$
  • ^
    在字符串开头断言位置
  • (?=.{2})
    至少2个字符
  • 和(:
    • [a-zA-Z]+
      至少一个字母字符
  • 或:
    • ([\u''-])
      捕获组1中捕获的空格、下划线、神奇撇号、撇号或破折号
    • (?!\1)
      消极前瞻,即刚刚捕获的内容也不是下一个角色
  • )
    +
    尽可能多次
  • $
    在字符串末尾断言位置

以下正则表达式将满足您的要求:

^(?=.{2})(?:[a-zA-Z]+|([ _’'-])(?!\1))+$
  • ^
    在字符串开头断言位置
  • (?=.{2})
    至少2个字符
  • 和(:
    • [a-zA-Z]+
      至少一个字母字符
  • 或:
    • ([\u''-])
      捕获组1中捕获的空格、下划线、神奇撇号、撇号或破折号
    • (?!\1)
      消极前瞻,即刚刚捕获的内容也不是下一个角色
  • )
    +
    尽可能多次
  • $
    在字符串末尾断言位置

根据您的要求,任何字符串中都不应该有匹配项,因为所有字符串都有连续的重复字符。关于连续的特殊字符,您刚才在标题和要求2中说了“相同的字符”。我刚刚更正了要求2。根据您的要求,自所有人都有连续的重复字符。关于连续的特殊字符,你刚才在标题和要求2中说了“相同的字符”。我刚刚更正了要求2。