JS_正则表达式模式匹配
2017-11-29 20:08
267 查看
一.正则表达式的定义
1.直接量字符
*需要转义的加"\",不需要的直接使用自身字符
\t ,\n,\r,\f-换页符,字母和数字字符-自身
2.字符类
[...] 方括号内的任意字符
[^...] 不在方括号内的任意字符
. 除换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\s 任何Unicode空白符
\d 任何ASCII数字,等价于[0-9]
[\b] 退格直接量(特例)
3.重复
{n,m} 匹配前一项至少n次,但不能超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次
+ 匹配前一项1次或者多次
* 匹配前一项0次或者多次
4.选择、分组和引用字符
| 选择的是该符号左边的子表达式或右边的子表达式
(...) 组合,将几个项组合为一个单元,这个单元可通过"*"、"+"、"?"和"|"等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供伺候的引用使用
(?:...) 只组合,把项组合到一个单元,但不记忆与该组相匹配的字符
\n 和第n个分组第一次匹配的字符相匹配,组是圆括号的子表达式,组索引是从左到右的左括号,"?:"形式的分组不编码
5.锚字符
^ 匹配字符串的开头在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个单词的边界
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p) 零宽负向先行断言,要求接下来的字符都不与p匹配
6.修饰符
i 执行不区分大小写的匹配
g 执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
m 多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束
二.用于模式匹配的String方法
1.Search()。参数是一个正则表达式(不是,则首先会通过RegExp构造函数将它转换为正则表达式,不支持全局检索),返回第一个与之匹配的子串的起始位置,若无,则返回-1.
"JavaScript".search(/script/i); //4
2.replace()。执行检索与替换操作。
text.replace(/jacascript/gi,"JavaScript"); //将所有不区分大小写的javascript都替换成大小写正确的JavaScript
3.match()。最常用的String正则表达式。它的唯一参数就是一个正则表达式,返回的是一个有匹配结果组成的数组。
"1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]
//解析一个URl
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "Visit my blog at http://www.example.com/~david";
var result = text.match(url);
if(result != null){
var fulurl = result[0];// 包含"http:www.exaple.com/!david";
var protocol = result[1]; //包含"http;
var host = result[2]; //包含"www.example.com"
var path = result[3]; //包含"~david"
}
4.exec()。给字符串的match()传入一个非全局的正则表达式,实际上两者一样。
5.split()。拆分为一个子串组成的数组。
"123,456,789".split(","); //返回["123","456","789"]
三.RegExp对象
RegExp()构造函数带有两个字符串参数,其中第二个参数是可选的,RegExp()用于创建新的RegExp对象。第一个参数包含正则表达式主体部分,必须将"\"替换成"\\".RegExp()的第二个参数可选,只能传入g、i、m或者它们的组合。
var zipcode = new RegExp("\\d{5}","g");
1.RegExp的属性(5个)。
*source是一个只读的字符串,包含正则表达式的文本。
*global是一个只读的布尔值,用于说明这个正则是否带有修饰符g。
*ignoreCase是一个只读的布尔值,用于说明正则表达式是否带有修饰符i。
*multiline是一个只读的布尔值,用于说明正则表达式是否带有m。
*lastIndex是一个可读/写的整数。如果匹配模式带有g修饰符,这个属性存储在整个字符串中下一次检索的开始位置。(在exec()和test()方法中用到)。
2.方法
//反复调用exec()
var pattern = /Java/g;
var text = "JavaScript is more fun than Java!";
var result;
while((result = pattern.exec(text))!=null){
alert("Matched '"+result[0]+"'"+" at position " + result.index+ ";next search begins at "+pattern.lastIndex);
}
//test()
var pattern /java/i;
pattern.test("JavaScript"); //返回true
1.直接量字符
*需要转义的加"\",不需要的直接使用自身字符
\t ,\n,\r,\f-换页符,字母和数字字符-自身
2.字符类
[...] 方括号内的任意字符
[^...] 不在方括号内的任意字符
. 除换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\s 任何Unicode空白符
\d 任何ASCII数字,等价于[0-9]
[\b] 退格直接量(特例)
3.重复
{n,m} 匹配前一项至少n次,但不能超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次
+ 匹配前一项1次或者多次
* 匹配前一项0次或者多次
4.选择、分组和引用字符
| 选择的是该符号左边的子表达式或右边的子表达式
(...) 组合,将几个项组合为一个单元,这个单元可通过"*"、"+"、"?"和"|"等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供伺候的引用使用
(?:...) 只组合,把项组合到一个单元,但不记忆与该组相匹配的字符
\n 和第n个分组第一次匹配的字符相匹配,组是圆括号的子表达式,组索引是从左到右的左括号,"?:"形式的分组不编码
5.锚字符
^ 匹配字符串的开头在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个单词的边界
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p) 零宽负向先行断言,要求接下来的字符都不与p匹配
6.修饰符
i 执行不区分大小写的匹配
g 执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
m 多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束
二.用于模式匹配的String方法
1.Search()。参数是一个正则表达式(不是,则首先会通过RegExp构造函数将它转换为正则表达式,不支持全局检索),返回第一个与之匹配的子串的起始位置,若无,则返回-1.
"JavaScript".search(/script/i); //4
2.replace()。执行检索与替换操作。
text.replace(/jacascript/gi,"JavaScript"); //将所有不区分大小写的javascript都替换成大小写正确的JavaScript
3.match()。最常用的String正则表达式。它的唯一参数就是一个正则表达式,返回的是一个有匹配结果组成的数组。
"1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]
//解析一个URl
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "Visit my blog at http://www.example.com/~david";
var result = text.match(url);
if(result != null){
var fulurl = result[0];// 包含"http:www.exaple.com/!david";
var protocol = result[1]; //包含"http;
var host = result[2]; //包含"www.example.com"
var path = result[3]; //包含"~david"
}
4.exec()。给字符串的match()传入一个非全局的正则表达式,实际上两者一样。
5.split()。拆分为一个子串组成的数组。
"123,456,789".split(","); //返回["123","456","789"]
三.RegExp对象
RegExp()构造函数带有两个字符串参数,其中第二个参数是可选的,RegExp()用于创建新的RegExp对象。第一个参数包含正则表达式主体部分,必须将"\"替换成"\\".RegExp()的第二个参数可选,只能传入g、i、m或者它们的组合。
var zipcode = new RegExp("\\d{5}","g");
1.RegExp的属性(5个)。
*source是一个只读的字符串,包含正则表达式的文本。
*global是一个只读的布尔值,用于说明这个正则是否带有修饰符g。
*ignoreCase是一个只读的布尔值,用于说明正则表达式是否带有修饰符i。
*multiline是一个只读的布尔值,用于说明正则表达式是否带有m。
*lastIndex是一个可读/写的整数。如果匹配模式带有g修饰符,这个属性存储在整个字符串中下一次检索的开始位置。(在exec()和test()方法中用到)。
2.方法
//反复调用exec()
var pattern = /Java/g;
var text = "JavaScript is more fun than Java!";
var result;
while((result = pattern.exec(text))!=null){
alert("Matched '"+result[0]+"'"+" at position " + result.index+ ";next search begins at "+pattern.lastIndex);
}
//test()
var pattern /java/i;
pattern.test("JavaScript"); //返回true
相关文章推荐
- JS中正则表达式只有3种匹配模式(没有单行模式)详解
- js中使用正则表达式(五)特殊字符、匹配模式、捕获组与反向引用介绍
- JS学习十二天----正则表达式的模式匹配
- JS中正则表达式的模式匹配
- JS中正则表达式全局匹配模式 /g用法详解
- JS中正则表达式所缺少的匹配模式(单行模式)
- js中正则表达式的模式匹配
- JS中正则表达式所缺少的匹配模式(单行模式)
- JS中正则表达式只有3种匹配模式(没有单行模式)
- JS正则表达式学习之路:(二)用于模式匹配的String方法
- 正则表达式贪婪模式及最短匹配
- 【笔记】 《js权威指南》- 第10章 正则表达式和模式匹配
- 正则表达式的3种匹配模式
- js 正则表达式 匹配除汉字,字母,数字,逗号,句号外的特殊字符(用来规范输入内容)
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- js正则表达式详解-子匹配 匹配原理 例子讲解
- 正则表达式的3种匹配模式
- js正则表达式中匹配反引号
- Scala的模式匹配和正则表达式
- 犀牛——第10章 正则表达式的模式匹配 10.3