2

jQuery 数据表库文件中有一个构造正则表达式的方法。谁能告诉我以下正则表达式是什么意思-

^(?=.*?il)(?=.*?oh).*$
4

2 回答 2

11
^

匹配输入的乞求。这匹配一个位置,而不是一个字符(将其视为字符之间的空格)。

(?=)

这称为前瞻。同样,这匹配一个位置。它匹配的位置是当前位置前面的文本等于给定文本的位置,但“指针”不向前移动。可以把它想象成在不弹出的情况下向前窥视。

.*?il

匹配任意数量的任意字符(默认情况下,换行符除外),后跟字符“il”。

.*?oh

同上,除了字符“哦”。

$

匹配输入的结尾。

基本上,这个正则表达式检查输入字符串是否包含字符“il”和“oh”。

类比:
这样想。你有一个人的阵容,然后你升到第一人称(^)。然后你一次向前看一个人,直到你找到一个戴红帽子的人,紧接着是一个黄帽子。( (?=.*?il))。你的眼睛飞快地回到阵容中的第一个人,然后重复搜索,但这次你正在寻找一个戴着紫色帽子的人,紧接着是一个绿色帽子((?=.*?oh))。最后,你走过所有的人,将每个人从队伍中拉出来,直到你走到队伍的尽头(.*$)。如果在任何时候你都找不到你要找的东西,你就会转身离开房间(相当于返回 false)。否则,到了阵容的尽头,你就喊“糖果”!(相当于返回true)。

兴趣点:
前瞻使用所谓的“非贪婪”量词 ( *?)。这基本上是说“尽可能多地匹配,但不再匹配”。贪心量词 ( *) 表示“尽可能多地匹配”。如果使用了贪婪的量词,这相当于将你的眼睛移到阵容的后面,然后向前面扫视,在第一场比赛时停下来(如果从前面算起,那将是阵容中的最后一场)。

如果您要删除输入锚 ( ^) 的开头,则此表达式将容易受到灾难性回溯的影响。由于前瞻是根据一个位置进行匹配的,如果不匹配,那么它会尝试前进一个字符并重试。保持前瞻锚定到输入中的^第一个位置。如果他们不能从那个位置找到他们正在寻找的东西,那么他们就会失败。

.*$部分是绒毛。您可以在不影响表达式的情况下删除它(编辑:实际上,如果您只是测试输入,那是真的。您正在使用结果匹配,那么您需要.*生成一个非零长度字符串)。但是,如果您想确保输入具有一定的长度,请.{5,10}$改用。这就像走过阵容,数着你拉出来的人数,然后只喊“糖果!” 如果您找到至少 5 个人但不超过 10 人(替代方案:{5,}- 至少 5 个字符,没有上限;{0,10}- 不超过 10 个字符0作为下限值)。鉴于您已经在寻找字符“il”和“oh”,因此已经隐含要求输入至少为 4 个字符(没有上限)。

于 2012-10-03T15:01:04.680 回答
1

您可以使用http://gskinner.com/RegExr/来帮助分析大多数正则表达式并根据输入数据对其进行测试。互联网上有一些类似的工具。这个需要Flash。(这不是卖点,只是信息。)

请注意,我提供的 URL 在regex.

于 2012-10-03T14:57:56.250 回答