所以我试图匹配一个(任何)单词:
我目前使用前瞻
来实现这一目标^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$
但是我无法通过一个单词来匹配。我尝试在前瞻周围使用\b
,但它不起作用。我试图匹配的词可以按任何顺序具有上述条件。例如:aB5或Ba5或5Ba等。需要一些指示。
答案 0 :(得分:3)
主要问题是.
包含空格。您需要将.
更改为仅限于字词字符,即\w
。请注意,\w
(大部分)[A-Za-z0-9_]
,如果您希望排除其中一些或包含更多内容,则应进行相应的更改。
另一件事是,如果您在字符串中查找单词,则需要删除^
和$
,因为它们分别表示字符串的开头和结尾。
由于你的所有要求都是“至少”(而不是“最多”),你实际上并不需要\b
,因为匹配从左到右发生,所以你永远不会得到一部分一句话。
正则表达式:
(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w+
答案 1 :(得分:2)
我目前使用前瞻
来实现这一目标^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$
但我无法用一个词来匹配。
Lookaheads是正确的方法,但是如果你只想找到单个单词,那么你不能允许每个字符(.
)介于两者之间但只允许单词字符(如\w
)。所以
/(?=\w*\d)(?=\w*[a-z])(?=.\w[A-Z])\w+/g
应该这样做。当然,你可以自由地允许更多的字母,而不仅仅是\w
,甚至可以\S
。