资讯专栏INFORMATION COLUMN

正则表达式

k00baa / 350人阅读

摘要:但不管是那种匹配都必须保证匹配满足正则表达式基本条件。在正则表达式中,通过分组可以在一个完整的模式中定义子模式。在同一个正则表达式的后部分可以引用前面的子表达式。

预定义字符类
.(点好): 匹配除了换行符和其他Unicode行终止符(如回车符)之外的任意字符,等价于[^

]
w: 匹配任何ASII单字字符,等价于[a-zA-Z0-9_]
W: 匹配任何非ASII单字字符,等价于[^a-zA-Z0-9_]
s: 匹配任何Unicode空白符,等价于[	
x0Bf
]

贪婪匹配

概念:如星号(*)元字符在执行匹配时,先看整个字符串是否匹配,如果不匹配则去掉该字符串中的最后一个字符,并再次尝试。

1.?、{n}和{n,m}重复类

这三个都具有弱贪婪性,主要表现在贪婪性具有有限性。对于?匹配,在选择匹配还是不匹配时,如果条件允许,它总是会选择匹配而不是不匹配;{n,m}在条件允许的情况下,匹配m次,而不是n次。
正则式的贪婪性是在遵循匹配条件基础上尽可能占有更多的字符,而不是随意占用。

2.*、+和{n,}重复类

这三个具有强贪婪性,这种贪婪表现为贪婪的无限性

星号(*)重复类的匹配底线是最宽容的,匹配欲望是最强烈的。不管是否存在指定字符或子表达式都会执行匹配操作

加号(+)重复类的匹配底线是最少存在一个符合指定条件的字符或子表达式,否则不予执行匹配操作

{n,}重复类的匹配底线是最灵活的,执行任意底线和条件的无限贪婪的匹配操作。

正则表达式是有贪婪性的,它总是与最长的长度匹配,而且越是排在左侧的重复类匹配符优先级就越高。

var s = "";
var r = /(<.*>)(<.*>)/
var a = s.match(r);
alert(a[1])//
alert(a[2])//

上面的演示说明,当多个重复类并列子在一起时,左侧重复类具有较大的优先权,并尽可能的占有更多的符合条件的字符。

惰性匹配

惰性匹配它将先查看字符串中的第一个字符是否匹配,如果匹配条件不够,就读入下一个字符。如果还是匹配不足够,惰性匹配会继续从字符串中读取字符串直到发现匹配或者整个字符串都检查过也没有匹配为止。惰性匹配只需要在重复类后面添加问号(?)就可以了。问号必须放在重复字符串后面。
贪婪匹配体现了最大化匹配原则,那么惰性匹配体现了最小化匹配原则。但不管是那种匹配都必须保证匹配满足正则表达式基本条件。

{n,m}?: 正则表达式尽量匹配n次,但是为了满足匹配条件也可能最多重复m次

{n}?: 正则表达式尽量匹配n次;

{n,}?: 尽量匹配n次,但为了满足匹配条件也可能匹配任意次

??: 正则表达式尽量匹配,但是为了满足匹配条件也可能多次匹配1次,相当于{0,1}?

+?: 尽量匹配1次,但是为了满足匹配条件也可能匹配任意次数,相当于{1,}?

*?:相当于{0,}?

支配匹配(浏览器兼容不强)

这个是另一种类型的匹配模式,它的算法是:只匹配整个字符串。如果整个字符串不能匹配,则会自动放弃匹配,不再执行迭代以求进一步尝试。支配匹配只需要在重复类后面添加加号(+)即可。

高级匹配模式

1.分组:就是通过用小括号来包含一系列字符、字符类,或者重复类量词,以实现处理各种特殊的字符序列
通过小括号逻辑分隔符,实现分别储存每个被匹配的标签,最后通过这个数组类获取每个标签的名称。小括号表示一个独立的逻辑域,其匹配的内容将被独立存储。
分组的应用价值

把多带带的项目进行分组,以便合成子表达式,这样就可以像处理yi个独立的字符那样,使用|、+、*或?等字符来处理他们。

在正则表达式中,通过分组可以在一个完整的模式中定义子模式。当一个正在表达式成功地与目标字符串匹配时,也可以从目标字符串中抽出与小括号中的子模式相匹配的部分。

var s = "ab=21,bc=45,cd=43";
var r = /(w+)=(d+)/;
var a = s.match(r); ["ab=21","ab","21"]

在同一个正则表达式的后部分可以引用前面的子表达式。这是通过在字符“”后加一位或多位数字实现的。数字指定了带括号的子表达式在正则表达式中的位置

var s = "

title

text

" var r = /().*1/g; var a = s.match(r);//["

title

","

text

"]
非引用型分组

正则表达式分组会占用一定的系统资源,在较长的正则表达式中,存储反向引用会降低匹配速度。创建非引用型分组的方法是,在括号的后面分别加上一个问号和冒号。(?:w*?)

声明

正则表达式用来声明正则表达式在什么条件下才能匹配,或者不在什么条件下才会匹配,这种声明包括正前向声明和反向前声明两种模式

正前向声明是指匹配模式后面的字符,声明表示条件的意思,也是指定在接下来的字符必须被匹配,但并不真正进行匹配。通俗的讲,就是指定可能执行匹配操作的条件,该条件作为正则表达式的匹配模式一部分而存在,但是不会真正使用该条件去执行匹配。

var s = "a:123 b=345";
var r = /w*(?==)/;
var a = s.match(r);//["b"]

反前向声明,就是指定接下来的字符都不必匹配,反前向声明使用“(?!匹配条件)”来表示

var s = "a:123 b=345";
var r = /w*(?!=)/;
var a = s.match(r);//["a"]
静态

var s = "JavaScript, not Javascript";
var r = /(Java)Script/gi;
var a = r.exec(s);
RegExp.input//"JavaScript, not Javascript"
RegExp.leftContext//空字符串
RegExp.rightContext//", not Javascript"
RegExp.lastMatch//"JavaScript"
RegExp.lastParen//"Java"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82634.html

相关文章

  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JS中的正则达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0
  • JavaScript正则达式总结

    摘要:正则表达式一直是里比较难以掌握的点。在中创建正则的两种方式使用字面量这就是正则表达式的字面量语法,表示正则表达式的模式,为正则表达式的标志。字面量形式的正则表达式一般使用较多,也推荐大家尽可能使用这种形式,简洁易读,符合正常的使用习惯。 正则表达式一直是js里比较难以掌握的点。 看不懂,学不会,记不住。 每次需要用到正则的时候,都需要再去查找资料。 今天花时间把正则的知识点总结下,希望...

    big_cat 评论0 收藏0
  • 正则与JS中的正则

    摘要:注意本文将正则与中的正则分开讨论。正则零宽断言更多参考各种语言对于正则不同支持参考单行模式与多行模式通过设置正则表达式后的修饰符可开启对应的匹配模式单行模式和多行模式。 最近这段时间帮同学处理一些文档, 涉及到一些结构化文档的工作大部分都得使用正则表达式, 之前对于正则的认识大多来源于语言书上那几页的介绍, 自己也没有用过几次。这里将我之前感到模糊的概念作个整理。因为对JS了解多点,所...

    firim 评论0 收藏0
  • JavaScript正则达式的匹配模式

    摘要:选择分组和引用正则表达式的语法还包括指定选择项子表达式分组和引用前一子表达式的特殊字符。带圆括号的表达式的另一个用途是允许在同一正则表达式的后部引用前面的子表达式。 正则表达式(regular expression)是一个描述字符模式的对象。JavaScript的 RegExp类 表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进 行强大的模式匹配和文本检索与...

    wqj97 评论0 收藏0
  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0

发表评论

0条评论

k00baa

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<