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中,正则表达式是一种强大的工具,可以帮助开发者实现复杂的数据验证、文本...
本书从字符匹配、位置匹配、括号的作用、回溯法原理、拆分、构建和编程等方面深入讲解了JavaScript正则表达式的相关知识,适合需要进行字符串匹配、提取、验证等操作的读者学习。 第1章介绍了正则表达式字符匹配的...
正则表达式(Regular Expression,简称regex)是编程领域中一种强大的文本处理工具,用于匹配字符串模式。在面试和笔试中,尤其是对于IT行业的技术职位,掌握正则表达式是必不可少的技能,尤其是在中兴、华为等知名...
**JavaScript正则表达式迷你书(1.1版)** 正则表达式是JavaScript中一个强大的工具,用于处理文本字符串,进行模式匹配...本书"JavaScript正则表达式迷你书(1.1版)"将对此进行全面讲解,帮助读者掌握这一关键技能。
"传智播客_张孝祥_JavaScript7_正则表达式"这个课程可能详细讲解了JavaScript中的正则表达式及其应用。 1. 正则表达式基础: - 定义:正则表达式是一种模式匹配工具,用于描述一种特定的字符串模式。 - 基本元素...
"JS正则表达式葵花宝典"深入讲解了正则表达式的使用技巧和高级特性,特别是针对URL验证的正则表达式,以及递归匹配和非贪婪匹配的概念。 首先,我们来谈谈URL验证的正则表达式。一个完整的URL通常包含协议(如http...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。在IT领域,无论是编程、数据处理还是网页开发,正则表达式都扮演着至关重要的角色。"正则表达式系统教程CHM"是一个专门针对这一主题的...
9. 正则表达式引擎:讲解不同的正则表达式引擎工作原理和差异,如Perl、Java、JavaScript等。 10. 实战应用:结合实例展示正则表达式在Web开发、文本处理、数据验证等方面的应用。 通过阅读《精通正则表达式》这...
书中可能涵盖了更高级的主题,如回溯、非贪婪匹配、Unicode支持、正则表达式的性能优化以及在不同编程环境中的实现差异等。随着对正则表达式理解的加深,你将在处理各种文本问题时更加得心应手。
比如在JavaScript、Python、Perl等语言中的正则表达式API,以及在文本编辑器、搜索引擎和Web开发中的应用。此外,本章还会涉及正则表达式的替代方案,如PCRE(Perl兼容正则表达式)库,以及正则表达式在数据提取、...
《精通正则表达式》第三版是一本深受程序员喜爱的经典著作,它深入浅出地讲解了正则表达式的原理和应用。正则表达式是一种强大的文本处理工具,广泛应用于数据验证、文本搜索与替换、模式匹配等多个领域。本书带书签...
正则表达式在文本处理、数据验证、日志分析、搜索功能、Web开发等领域有广泛应用,如在JavaScript、Python、Java等编程语言中,以及grep、sed等命令行工具。 学习正则表达式需要时间和实践,一开始可能会觉得复杂...
此外,书中还会涉及正则表达式的优化技巧,如避免回溯、使用非贪婪匹配等,这对于处理大量数据时的性能优化至关重要。同时,正则表达式的调试也是学习过程中的重要环节,读者将学会如何使用各种工具(如Perl的 `perl...
1. **JavaScript**: 在JavaScript中,正则表达式可以通过`/pattern/flags`的形式创建,例如`/hello/gi`表示全局搜索不区分大小写的"hello"。 2. **Python**: Python的`re`模块提供了正则表达式的功能,如`re.search...
正则表达式是编程语言中用于模式匹配和字符串处理的强大工具,尤其在Java中,它提供了丰富的API来支持正则表达式的使用。本教程将深入浅出地介绍Java中的正则表达式,帮助初学者快速掌握这一核心技能。 1. **正则...
在实际应用中,我们经常需要处理复杂的正则表达式,如捕获组、预查(lookahead 和 lookbehind)、否定预查(negative lookahead 和 negative lookbehind),以及非贪婪匹配。这些高级特性可以实现更精细的文本匹配...
9. **正则表达式在不同语言中的差异**:例如JavaScript、Python、Java等语言中的正则表达式语法和特性可能略有不同。 10. **实践应用**:通过实际案例展示正则表达式在数据验证、文本处理中的应用。 "Regular.exe...
- **书籍**:《精通正则表达式》是经典的正则表达式参考书,深入讲解了正则表达式的原理和实践。 - **教程**:MDN Web文档、W3School等网站提供了详细的正则表达式教程。 5. **编程语言支持** - **Python**:...