《JavaScript语言精粹》--第7章:正则表达式
2013-06-18 22:19
211 查看
/* JS中的正则表达式 JS中,正则表达式必须写在一行中 两种创建正则表达式的方式: 使用"/regex/"来创建正则表达式字面量,这也是不建议使用块状注释的原因 使用new RegExp("regex","gmi")方法创建正则表达式对象 优先考虑使用字面量 字面量更加直观 使用new RegExp来创建需要进行字符转义 */ /*正则表达式字面量创建*/ console.log(/^(\w+)@(\w+)\.(\w+)(\.\w+)?$/.exec("wly12345@sina.com")); //输出: //["wly12345@sina.com", "wly12345", "sina", "com", undefined, index: 0, input: "wly12345@sina.com"] /*正则表达式对象的创建*/ console.log(new RegExp("^(\\w+)@(\\w+)\\.(\\w+)(\\.\\w+)?$").exec("wly12345@sina.com")); //输出 //["wly12345@sina.com", "wly12345", "sina", "com", undefined, index: 0, input: "wly12345@sina.com"] /* 正则表达式语法 匹配开始和结束: ^表示此字符串开始 $表示此字符串结束 分组 (...)表示捕获型分组,一个捕获型分组会复制它所匹配的文本放入result数组中 (?:...)表示一个非捕获型分组,仅作简单匹配,不会捕获匹配的分组 (?=...)向前正向匹配,类似于非捕获型分组,但在这个组匹配之后,文本会倒回到它开始的地方,实际上并不匹配任何东西,不是一个好的特性 (?!...)向前负向匹配,类似于向前正向匹配,只有当它匹配失败时才继续向前进行匹配,不是一个好的特性 量词 {a,b} a~b次 {a,} 至少a次 ?表示重复0次或1次 {0,1} *表示任意次数 {0,} +表示至少一次 {1,} 如果一个量词表示贪婪型匹配 如果一个量词附加一个?后缀,表示非贪婪匹配 模式 g全局,匹配多次 i大小写敏感 m多行 转义 \f 换页符 \n 换行符 \r 回车 \t 制表符 \u Unicode表示一个十六进制常量 \d [0-9] \D [^0-9] \s [\f\n\r\t\u000B\u0020\u00A0\u2028\u2029] Unicode空白的不完全子集 \S 与\s相反 \b 子边界标识,不是一个好特性 \1 分组1所捕获到的文本的一个引用 \2 \3类推 \w [0-9A-Z_a-z] \W 与\w相反 [A-Za-z\u00C0-\u1FFF\u2800-\uFFFD] 包括所有Unicode字母 RegExp对象的属性 global : g被使用,则为true ignoreCase : i被使用,则为true lastIndex : 下一次exec匹配开始的索引,初始值为0 multiline : m被使用,则为true source : 正则表达式的源码文本 */ /*非捕获型分组*/ console.log(/^(\w+)@(\w+)\.(?:\w+)(\.\w+)?$/.exec("wly12345@sina.com")); //输出: //["wly12345@sina.com", "wly12345", "sina", undefined, index: 0, input: "wly12345@sina.com"] //分析: //第三个分组为非捕获型,所以没有存入result中 /*向前正向匹配*/ console.log(/^(\w+)@(\w+)(?=\.\w+)\.(\w+)$/.exec("wly12345@sina.com")); //输出: //["wly12345@sina.com", "wly12345", "sina", "com", index: 0, input: "wly12345@sina.com"] //分析: //第三个分组为向前正向捕获,所以没有存入result中,会回到原来位置,所以第四个分组也会被捕获到,为com /*向前负向匹配*/ console.log(/^(\w+)@(\w+)(?!\.\w+)\.(\w+)$/.exec("wly12345@sina.com")); //输出: //null //分析: //第三个分组为向前负向捕获,不匹配,所以没有结果,为null /*贪婪型匹配*/ console.log(/(a+)/.exec("aaaaa")); //输出: //["aaaaa", "aaaaa", index: 0, input: "aaaaa"] //分析: //贪婪匹配了所有的a /*非贪婪型匹配*/ console.log(/(a+?)/.exec("aaaaa")); //输出: //["a", "a", index: 0, input: "aaaaa"] //分析: //非贪婪匹配,只匹配了一个a /*全局匹配*/ console.log("aab+ccc.ddd{asdf".replace(/(\w+)/g,"word")); console.log("aab+ccc.ddd{asdf".replace(/(\w+)/,"word")); //输出: // word+word.word{word // word+ccc.ddd{asdf //分析: // 第一个匹配全局,所以所有的字母串都被替换成了word // 第二个匹配第一个,所以甚至有aab被替换成了word /*多行匹配*/ console.log("aab\nbbc\nccd".match(/^(\w+)$/gm)); console.log("aab\nbbc\nccd".match(/^(\w+)$/g)); //输出: // ["aab", "bbc", "ccd"] // null //分析: // 第一行,使用全局和多行匹配模式,可以匹配每一行 // 第二行,仅仅使用全局匹配模式,由于正则表达式中规定必须全部为字母或数字,所以不匹配,结果为null
相关文章推荐
- 《利用Python进行数据分析》第7章 字符串操作与正则表达式
- 第7章 sed、gawk介绍与正则表达式-----------(定义基本正则表达式(BRE)模式)
- 第7章 sed、gawk介绍与正则表达式-----------(sed编辑器基础知识)
- 第7章 sed、gawk介绍与正则表达式-----------(sed编辑器基础知识)
- 第7章 sed、gawk介绍与正则表达式-----------(扩展的正则表达式)
- 第7章 sed、gawk介绍与正则表达式-----------(sed编辑器简单使用)
- 第7章 sed、gawk介绍与正则表达式-----------(gawk编辑器简单使用)
- 第7章 sed、gawk介绍与正则表达式-----------(sed编辑器简单使用)
- 第7章 sed、gawk介绍与正则表达式-----------(正则表达式定义与类型)
- 第7章 sed、gawk介绍与正则表达式-----------(gawk编辑器简单使用)
- 第7章 sed、gawk介绍与正则表达式-----------(正则表达式定义与类型)
- 第7章 sed、gawk介绍与正则表达式-----------(定义基本正则表达式(BRE)模式)
- 第7章 sed、gawk介绍与正则表达式-----------(sed编辑器基础知识)
- 第7章 sed、gawk介绍与正则表达式-----------(扩展的正则表达式)
- 第7章 sed、gawk介绍与正则表达式-----------(定义基本正则表达式(BRE)模式)
- JavaScript语言精粹笔记之正则表达式
- 第7章 sed、gawk介绍与正则表达式-----------(定义基本正则表达式(BRE)模式)
- 第7章 sed、gawk介绍与正则表达式-----------(定义基本正则表达式(BRE)模式)
- 第7章 sed、gawk介绍与正则表达式-----------(sed编辑器基础知识)
- 第7章 sed、gawk介绍与正则表达式-----------(扩展的正则表达式)