如何从特定的单词开始?

时间:2014-06-10 01:57:31

标签: regex

我的工作是创建一个正则表达式,匹配名称的任何变体:vic,Victor,Victoria,victor,Victoria,VICKY,VICTOR。维多利亚,维多利亚,维多利亚州

所以我写了这个

(维克[A-Z] )|(VIC [A-Z] )|(VIC [A-Z] *)

我有一个问题。例如,如果我键入“Hello aVictoria”,它将匹配字符串“Victoria”...如何使其匹配,以使第一个字符必须是V或v?

4 个答案:

答案 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