News新闻

业界新闻动态、技术前沿
Who are we?

您的位置:首页      JS/JQ/AJAX      javascript正则表达式高级篇

javascript正则表达式高级篇

发布日期:2014-02-20 00:00:00 842

javascript正则表达式

通过上面基础篇和中级篇的学习,我相信我们都能够写出漂亮的正则了,但是一些特殊的功能也许还需要我们继续往下学习这些高级篇的知识。

正则表达式的贪婪模式和懒惰模式:

贪婪模式和懒惰模式用言语很难讲解清楚,我们这里使用例子的形式来进行讲解,当然下面的一些知识也会以例子的形式来表达。

var regExp = /8.*8/;

var regExpTwo = /8.*?8/;

var str = "8google8 8google8 8google8";

var resultOne = regExp.exec(str); 此处的结果为google8 8google8 8google它尽量多的想要匹配得更多,所以为贪婪模式,其实是用了重复(区间)匹配的正则表达式都为贪婪模式;

var resultTwo = regExpTwo.exec(str); 此处的结果为google 它尽量少的匹配,所以为懒惰模式,在重复(区间)元素的后面加上?就变为相应的懒惰模式。

不在多说,相信你已经能够很好的理解正则表达式的贪婪和懒惰模式了。

正则表达式的两条准则:

1,当正则表达式有嵌套的分组时,分组由外向内。

2,正则表达式中的特殊元素匹配时需要加上\

前瞻模式:

前瞻模式是指某个匹配后面必须跟着某个字符串,例子如下:

var regExp = /goo(?=gle)/;

var strOne = google;

var strTwo = googoo;

当匹配第一个字符串时能匹配成功,而匹配第二个字符串时将匹配失败,因为模式规定在goo后面必须要跟着gle,而且返回的结果为goo;

捕获性分组和非捕获性分组:

我们不做言语的讲解直接上例子,例子如下:

var regExp = /(google)\s(2014)/;

var str = "google 2014";

regExp.exec(str); 此处获得一个数组结果集,里面的元素分别为google 2014,google,2014;

如果regExp改为/(google)\s(?:2014)/,则数组中就只会包含两个元素分别为google 2014,google

因为第二个分组为非捕获性的分组

项目经验:

上面讲解了一些特殊的正则表达式,也许在真正的项目中很少用到,但是掌握它们,能让你的知识更加分丰富,遇到比较难的正则表达式不至于手足无措。