正则表达式中的一个单词

时间:2013-08-13 15:45:05

标签: regex coffeescript

所以我试图匹配一个(任何)单词:

  1. 至少一个大写字母
  2. 至少一封小写字母
  3. 至少一个号码
  4. 我目前使用前瞻

    来实现这一目标
    ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$
    

    但是我无法通过一个单词来匹配。我尝试在前瞻周围使用\b,但它不起作用。我试图匹配的词可以按任何顺序具有上述条件。例如:aB5或Ba5或5Ba等。需要一些指示。

2 个答案:

答案 0 :(得分:3)

主要问题是.包含空格。您需要将.更改为仅限于字词字符,即\w。请注意,\w(大部分)[A-Za-z0-9_],如果您希望排除其中一些或包含更多内容,则应进行相应的更改。

另一件事是,如果您在字符串中查找单词,则需要删除^$,因为它们分别表示字符串的开头和结尾。

由于你的所有要求都是“至少”(而不是“最多”),你实际上并不需要\b,因为匹配从左到右发生,所以你永远不会得到一部分一句话。

正则表达式:

(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w+

Test

答案 1 :(得分:2)

  

我目前使用前瞻

来实现这一目标
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$
     

但我无法用一个词来匹配。

Lookaheads是正确的方法,但是如果你只想找到单个单词,那么你不能允许每个字符(.)介于两者之间但只允许单词字符(如\w)。所以

/(?=\w*\d)(?=\w*[a-z])(?=.\w[A-Z])\w+/g

应该这样做。当然,你可以自由地允许更多的字母,而不仅仅是\w,甚至可以\S