JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 正则表达式,组和量词大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚在 http://regexcrossword.com/做了有趣的正则表达式填字游戏 – 并且发现我不明白量化群体意味着什么,例如(.) 要么 (.)*

我试http://ole.michelsen.dk/tools/regex.html,它提供JavaScript和php正则表达式引擎:

要匹配的字符串是“Trololo!” (不带引号).
(如果打开“全局匹配”改变了某些东西,它会被添加为引导版本,即JS’,因为它在php模式下没有任何改变.)

JS,(.)+ => 0: Trololo! 1: ! 
JS',(.)+ => 0: Trololo! 
php,(.)+ => 0: Trololo! 0: ! 
JS,(.)* => 0: Trololo! 1: ! 
JS',(.)* => 0: Trololo! 
php,(.)* => 0: Trololo! 1: 0: ! 1: 
JS,(.){5} => 0: Trolo 1: o 
JS',(.){5} => 0: Trolo 
php,(.){5} => 0: Trolo 0: o 
JS,(.){4} => 0: Trol 1: l 
JS',(.){4} => 0: Trol 1: olo! 
php,(.){4} => 0: Trol 1: olo! 0: l 1: !

有没有任何规范性的答案,这是什么语义?

解决方法

输出没有正确标记,这就是全部.

首先,应该发生什么?如果重复一个组,则每个新实例都会覆盖最后一次捕获.如果根本没有使用该组,它将返回一个空字符串或类似于JS中的未定义(它取决于风格).关于此事,有一篇关于regular-expressions.info的文章.

现在我们如何得到你的结果?让我们从JavaScript开始吧.

标记为JS的所有示例(非全局的)符合以上描述.它们匹配0中所需的字符数量并捕获1中的最后一个字符.因此我们可以忽略它们.

全球的是什么?这里的输出解释不正确.当您使用带有String.match()函数的全局标志时,您不再获得所有捕获的数组 – 但只是所有匹配的数组(每个匹配的组0).因此,在*和{5}的情况下,只有一个匹配,你只得到那一个结果.使用{4},目标字符串中有足够的空间容纳两个匹配项,因此生成的数组包含两个元素.要使用全局标志获取所有捕获,您需要编写一个循环并使用RegExp.exec()(它一次为您提供一个匹配,但所有捕获都是如此).

什么是php?似乎它正在使用preg_match_all,无论如何都是全局的,这就是为什么使用g没有效果.给出了你期望的结果. {5}也是如此.

和其他两个人有什么关系?在这里,输出被解释为错误的方式.默认情况下,preg_match_all给出一个二维数组,其中第一个索引对应于组,第二个索引对应于匹配.在你的输出中,它被反过来解释.因此,当存在多个匹配时,第一对0和1是两个找到的匹配的整个匹配.第二对0和1是你在这两场比赛中捕获的.

所以对于*,你首先得到完整的字符串作为匹配,最后一个字符作为捕获(标记为0的两个东西),这是正确的.然后,因为*允许零宽度匹配,所以在字符串的末尾会得到另一个(空)匹配,以及一个空捕获.我不确定为什么相应的JS’示例不包含额外的空字符串,因为String.match会做同样的事情.

对于{4},你只需要获得两个匹配(Trol和olo!),就像在JavaScript情况下分别使用捕获l和!一样,这也很好.

大佬总结

以上是大佬教程为你收集整理的javascript – 正则表达式,组和量词全部内容,希望文章能够帮你解决javascript – 正则表达式,组和量词所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。