我使用这个正则表达式来查找数组中出现的以下所有事件:
/^.*(?=.*T)(?=.*O)(?=.*T)(?=.*A).*$/
它与匹配
pOTATO
mATTO
cATeTO
还有
lATO
minAreTO
AnTicO
尽管最后三个单词只有一个T
如何只提取至少包含两个Ts的单词,一个A,一个O,按任何顺序?
由于环视法站稳了脚跟,一旦第一次环视被尝试,下一次环视以及第一次环看后的所有后续环视都会从完全相同的位置进行检查。
你需要使用
/^(?=.*T.*T)(?=.*O)(?=.*A).*/
/^(?=.*T[^T]*T)(?=.*O)(?=.*A).*/
请注意^
之后缺少.*
,这是不必要的,因为只在字符串起始位置激发lookahead一次就足够了。现在,(?=.*T.*T)
确保有两个零个或多个字符的重复,而不是尽可能多的换行字符,后面跟着一个T
字符。(?=.*T[^T]*T)
确保尽可能多地存在除换行符以外的零个或多个字符,然后是T
,除T
之外的零个以上字符,然后又是另一个T
。
请参阅regex演示#1和regex演示#2。注意,(?=.*T[^T]*T)
可以与(?=.*T.*T)
匹配更多,因为[^T]
可以与换行符匹配。为了避免在演示中出现这种情况,我在否定字符类中添加了n
。