SKR*_*SKR 2 javascript regex jquery
jQuery datatables库文件中有一个构造正则表达式的方法.任何人都可以告诉我以下正则表达式意味着什么 -
^(?=.*?il)(?=.*?oh).*$
Run Code Online (Sandbox Code Playgroud)
^
Run Code Online (Sandbox Code Playgroud)
匹配输入的乞讨.这匹配一个位置,而不是一个字符(将其视为字符之间的空格).
(?=)
Run Code Online (Sandbox Code Playgroud)
这称为前瞻.再次,这匹配一个位置.它匹配的位置是紧靠当前位置前面的文本等于给定文本的位置,但"指针"不向前移动.想想它就像在没有弹出的情况下偷看前进一样.
.*?il
Run Code Online (Sandbox Code Playgroud)
匹配任意数量的任何字符(默认情况下除了换行符),后跟字符"il".
.*?oh
Run Code Online (Sandbox Code Playgroud)
与上面相同,除了字符"哦".
$
Run Code Online (Sandbox Code Playgroud)
匹配输入的结尾.
基本上,这个正则表达式是检查输入字符串是否包含字符"il"和"oh".
打个比方:
想象一下.你有一个人的阵容,你升到第一个人(^).然后你一次向前看一个人,直到你找到一个戴着红色帽子的人,紧接着是一顶黄色的帽子.((?=.*?il)).你的眼睛会回到阵容中的第一个人,然后你重复搜索,除非这次你正在寻找一个戴着紫色帽子的人,然后紧接着是一顶绿帽子((?=.*?oh)).最后,你走过所有人,将每个人拉出阵容,直到你走到行尾(.*$).如果,在任何时候,你找不到你想要的东西,你就会转身离开房间(相当于返回假).否则,在阵容结束后,你大喊"糖果!" (相当于返回true).
兴趣点:
前瞻者使用所谓的"非贪婪"量词(*?).这基本上说"尽可能多地匹配,但不能更多".贪婪的量词(*)表示"尽可能多地匹配".如果使用了贪婪的量词,则相当于将眼睛移动到阵容的后面,然后向前扫描,在第一场比赛时停止(如果从前面算起,这将是阵容中的最后一场).
如果你要删除输入锚(^)的开头,那么这个表达式很容易受到灾难性的回溯.由于前瞻基于位置匹配,如果它不匹配,那么它将尝试前进一个字符并再次尝试.所述^保持锚定到在输入端的第一位置的向前看符号.如果他们无法从那个位置找到他们想要的东西,那么他们就会失败.
这.*$部分是绒毛.您可以在不影响表达式的情况下删除它(编辑:实际上,如果您只是测试输入,那就是真的.您正在使用结果匹配,那么您需要.*生成非零长度的字符串).但是,如果您想确保输入是一定的长度,请.{5,10}$改用.这就像走过阵容一样,计算出你拔出的人数,只会大喊"糖果!" 如果你发现至少5个人但不超过10个(替代方案:{5,}- 至少5个字符没有上限; {,10}- 不超过10个字符,没有下限).鉴于您已经在寻找字符"il"和"oh",已经隐含要求输入至少为4个字符(没有上限).
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |