jQuery 数据表库文件中有一个方法可以构造正则表达式。谁能告诉我下面的正则表达式是什么意思 -
^(?=.*?il)(?=.*?oh).*$
最佳答案
^
匹配输入的请求。这匹配一个位置,而不是一个字符(将其视为字符之间的空格)。
(?=)
这称为前瞻。同样,这与位置匹配。它匹配的位置是当前位置紧前面的文本等于给定文本的位置,但“指针”不会向前移动。可以把它想象成向前看而不弹出。
.*?il
匹配任意数量的任意字符(默认情况下换行符除外),后跟字符“il”。
.*?oh
与上面相同,除了字符“oh”。
$
匹配输入的结尾。
基本上,这个正则表达式正在检查输入字符串是否包含字符“il”和“oh”。
类比:
这样想吧。您有一排人,您走向第一个人 (^
)。然后,你一次向前看一个人,直到找到戴红帽子的人,紧接着找到戴黄帽子的人。 ((?=.*?il)
)。您的目光回到队列中的第一个人,然后重复搜索,但这次您要寻找的是一个戴紫色帽子、紧接着戴绿色帽子的人 ((?=.*?oh)
)。最后,您走过所有人,将每个人从队列中拉出来,直到您到达队伍的末尾(.*$
)。如果在任何时候你找不到你要找的东西,你就会转身离开房间(相当于返回 false)。不然到了队伍最后,你就大喊“糖果!” (相当于返回true)。
兴趣点:
前瞻使用所谓的“非贪婪”量词 (*?
)。这基本上是说“匹配尽可能多的数量,但不能更多”。贪婪量词 (*
) 表示“尽可能多地匹配”。如果使用了贪婪量词,就相当于把你的眼睛移到阵容的后面,然后向前扫视,停在第一场比赛上(如果从前面数的话,这将是阵容中的最后一场)。
如果您要删除输入 anchor 的开头 (^
),那么此表达式将很容易遭受灾难性的回溯。由于lookahead是根据位置进行匹配的,如果不匹配,那么它会尝试前进一个字符并重试。 ^
使前瞻锚定到输入中的第一个位置。如果他们无法从该位置找到他们想要的东西,那么他们就会失败。
.*$
部分是无用的。您可以在不影响表达式的情况下删除它(编辑:嗯,实际上,如果您只是测试输入,那就是这样。您正在使用结果匹配,那么您需要 .*
来生成非零长度字符串)。但是,如果您想确保输入具有一定的长度,则可以使用 .{5,10}$
代替。这就像走过队伍,数一下你拉出来的人数,然后只喊“糖果!”如果您找到至少 5 人但不超过 10 人(替代方案:{5,}
- 至少 5 个字符,没有上限;{0,10}
- 不超过 10 个字符,以 0
作为下限值)。鉴于您已经在查找字符“il”和“oh”,因此已经隐含要求输入至少 4 个字符(没有上限)。
关于javascript - 理解正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711041/