我的工作是创建一个正则表达式,匹配名称的任何变体:vic,Victor,Victoria,victor,Victoria,VICKY,VICTOR。维多利亚,维多利亚,维多利亚州
所以我写了这个
(维克[A-Z] )|(VIC [A-Z] )|(VIC [A-Z] *)
我有一个问题。例如,如果我键入“Hello aVictoria”,它将匹配字符串“Victoria”...如何使其匹配,以使第一个字符必须是V或v?
答案 0 :(得分:0)
如果您需要单词的开头,可以使用\b
(单词边界0宽度匹配器)。如果您需要开始该行,则应使用^
(行0宽度匹配器的开头)。同样具有多行功能的Regexp引擎也将定义\A
(字符串0宽度匹配器的开头)。根据您的需要,将其中一个贴在正则表达式前面,如下所示:
^((Vic[a-z])|(vic[a-z])|(VIC[A-Z]*))
(你还需要额外的括号,因为否则你只会在开始时匹配“Victor”,但在任何地方都会匹配“victor”和“VICTOR”。)
那就是说,这与“vic”不匹配,因为你需要另外[a-z]
。这将是正确的正则表达式:
^((Vic[a-z]*)|(vic[a-z]*)|(VIC[A-Z]*))
这将匹配“Victor”,但不匹配“aVictor”。如果你写\b
而不是^
,你还会匹配“我不是胜利者”(虽然仍然不允许“aVictor”)。
答案 1 :(得分:0)
^
字符表示字符串的开头,如
^(Vic[a-z])|(vic[a-z])|(VIC[A-Z]*)
答案 2 :(得分:0)
您未能添加*,
(Vic[a-z]*)|(vic[a-z]*)|(VIC[A-Z]*)
在下面的正则表达式中,您未能在前两个正则表达式中添加+
或*
,
(Vic[a-z])|(vic[a-z])|(VIC[A-Z]*)
(Vic[a-z])
- 它匹配Vic之后的任何单个字母字符,但它不会匹配该字Vic
之后的多个字符。
答案 3 :(得分:0)
试试这个
/\bvic[a-zA-Z]{0,}/ig
for Explanation
示例
'vic, Victor, Victoria, victor, Victoria, VICKY, VICTOR. VICTORIA, Vic, VIC, Hello aVictoriaX'.match(/\bvic[a-zA-Z]{0,}/ig)
//output
["vic", "Victor", "Victoria", "victor", "Victoria", "VICKY", "VICTOR", "VICTORIA", "Vic", "VIC"]
//Hello aVictoriaX isn't matched