`
ljl_xyf
  • 浏览: 618042 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript中的正则表达式的贪婪模式和非贪婪模式讲解

阅读更多

1、贪婪模式: 根据匹配字符串以及表达式尽可能多的进行匹配,成为贪婪匹配模式
   例如:/a\d+/ 即可以匹配首字母为a的之后的许多数字,这个不进行限制
     或者另外一种方法/a\d{2,}/也可以实现同样的方法

2、非贪婪模式: 根据匹配字符串以及表达式尽可能少的进行匹配。使用的方法就是在修饰匹配次数的特殊符号后再加上一个?号进行限制 如"*?","+?","{n,}?","{n,m}?"
如:/a\d+?/即匹配的字符串为a为首字母,后面只能有一个数字

从指定字符串中取得url信息

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> javascript 测试 </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>

 <BODY>
  <script type="text/javascript">
var str = "<h2 style=\"font-size: 12px; margin-bottom:5px; padding-bottom:5px\"><a href  =   \"http://www.my400800.cn\" title=\"400电话\">400电话 </a></h2>";

var patt=/<a.*?[=][ ]{0,}[\"\']{1,1}(.*?)[\"\']{1,1}.*?>/g;
   //patt.compile(patt);
//var patt = new RegExp(/W3*hool/img,"g");
var result;
while ((result = patt.exec(str)) != null) {
    document.write(result[1]);
   document.write("<br />");
   document.write(patt.lastIndex);
   document.write("<br />");
}
</script>
 </BODY>
</HTML>

 

输出结果:

http://www.my400800.cn
119

 

 

 



3、复杂模式 分为分组,反向引用,候选,非捕获性分组,前瞻,边界定位符和多行模式等
  1)、分组,
引入()的概念,其语法是(pattern),即将“pattern”部分组合成一个可以统一操作的组合项或 子匹配,也就是说用括号括起一些字符,字符类或者量词等,每个捕获的字匹配项按照其出现的顺序存储在缓冲区中。 如:/(abc){3}/如过匹配的字符串是wcabcabcabc的话则可以匹配到的字符串是abcabcabc
  2)、反向引用  分组得到的子匹配,正则表达式后面的部分,可以引用前面分组的子匹配中已经匹配到的字 符串,这称之为反向引用 语法是\num,即可以引用编号为num的内容 其值是1-99的整数 如:/(\w)\2{2}/ 其中\2{2}表示子匹配 如果/\w{5}/可以匹配目标字符串中连续出现的几个字符,则可以是用/\w\1{5}/来匹配。正则表达式/<(\w+)\s*(\w+(= ('|").*?\4)?\s*)*>.*?</\1>/就可以匹配<td id="td2" style="float:left"></td> 这里的\1就是匹配的第一个括弧中\w+的内容。
  3)、候选: 即用“|”来表示匹配的表达式之间的或关系,语法是表达式|表达式,两个表达式是或的关系。如匹配座机号码 有3位区号8位号码和4位区号7位号码这两类,在写正则表达式的时候就可以写/(((\d{3}\)|\d{3}-)\d{8})|(((\d{4} \)|\d{4}-)\d{7})$/即表达了两类方式如023-47854xxx或者023/47854xxx  或者0234/xxxxxxx 0234-xxxxxxx
   4)、非捕获性分组: 其语法是(?:pattern),将pattern部分组合成为一个可以统一进行 操作的组合项,但是不把这部分内容当做子匹配捕获,这种方法必须在进行组合,但是又不想对组合的部分进行缓存的情况下使用。如找俩单词:programe 和project  前面的pro都相同,则可以写成/programe|project/或者是/pro(gram|ject)/,如果进行非捕获性匹配的话就要写成 /pro(?:gram|ject)/
   5)、正向前瞻: 语法是(?=pattern) 在目标字符串的响应位置必须要有pattern部分匹配的内容,但是不作为匹配结果处理,不会放在缓冲区中。/windows(?=xp|7)/,只能匹 配windows xp和windows7,不能匹配其他的内容 xp和7不作为结果返回。
   6)、负向前瞻: 语法是(?!pattern) 在被搜索的字符串的相应位置不能有pattern部分表示的内容,不能将其作为结果进行处理,也不会存在缓冲区中。 如/bed(?!room)/可以匹配bed后不是room的所有字符串
  7)、边界定位符: ^ 与字符串开始的地方匹配,不匹配任何字符 但是如果是放在[^a-z]的时候就表示匹配除了a-z以外的字符串。$表示与字符串结束的地方匹配,也是不匹配任何的字符。\b 匹配一个单词的边界,也就是单词和空格之间的位置,不匹配任何字符  \B是\b的“非”,即是匹配一个非单词边界。

 

 

 

分享到:
评论

相关推荐

    javascript常用正则表达式大全

    javascript常用正则表达式大全,基本覆盖基本需求的正则表达式

    使用正则表达式的模式匹配

    JavaScript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。 ECMAScript v3对JavaScript正则表达式进行了标准化。JavaScript 1.2实现了ECMAScript v3...

    JavaScript验证正则表达式大全.txtJavaScript验证正则表达式大全.txt

    JavaScript验证正则表达式大全.txtJavaScript验证正则表达式大全.txtJavaScript验证正则表达式大全.txtJavaScript验证正则表达式大全.txtJavaScript验证正则表达式大全.txtJavaScript验证正则表达式大全....

    常用java正则表达式

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    正则表达式大全 正则表达式 模式匹配 Javascript

    关键字:正则表达式 模式匹配 Javascript 摘要:收集一些常用的正则表达式。 正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里...

    JavaScript&正则表达式

    JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&...

    JavaScript经典正则表达式实战

    JavaScript经典正则表达式实战,欢迎下载,11111111111111111111

    JavaScript正则表达式.ppt

    了解正则表达式概念 掌握正则表达式的语法 熟练掌握正则表达式在JavaScript中的应用

    javascript正则表达式迷你书 (1).pdf

    javascript正则表达式迷你书 (1).pdf

    JavaScript_正则表达式语法.doc

    JavaScript_正则表达式语法.doc

    正则表达式经典实例

    《正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报...

    常用Javascript正则表达式汇总

    常用Javascript正则表达式汇总,常用Javascript正则表达式汇总

    精通 JavaScript正则表达式

    正则表达式可以: ...可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字 •根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字

    JavaScript中使用正则表达式

    JavaScript中使用正则表达式的一些验证

    JavaScript常用正则表达式

    总结的js常用的正则表达式,如邮箱,手机号码,等等验证方法。

    正则表达式练习题

    自己总结的部分javascript的正则表达式练习,希望可以帮助大家,未完整版,随后追加

    javaScript正则表达式讲解用ppt

    看看我们强大的正则表达式在我们强大的javascript中的用法吧

    JavaScript 常用正则表达式

    很全的正则表达式... 很全的正则表达式...

    《学习正则表达式》高清扫描版 PDF

    通过匹配特定单词、字符和模式,读者很快就可以自己动手使用正则表达式匹配、提取和转换文本。正则表达式是程序员必备的强大工具,得到了各种Unix实用程序,以及Perl、Java、JavaScript、C#等编程语言的支持。读完...

Global site tag (gtag.js) - Google Analytics