javascript - 理解正则表达式

标签 javascript jquery regex

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/

相关文章:

c++ - 使用正则表达式进行全词匹配

regex - 如何正确搭配呢?

javascript - 如何保持滚动条始终在底部?

javascript - 在react ComponentDidMount中访问this.props函数

javascript - Canvas 线宽太粗

JavaScript 调整大小 - div 无法正确呈现 - chalice 布局 - css

javascript过滤器编辑并保存数组

javascript - 如何将 Html 内容添加到弹出 slider

JavaScript:For 循环问题

Java正则表达式查找单个字符序列和数字序列