1. 正则表达式
是一个描述字符模式的对象.
1.创建方式
1) 正则表达式直接量
var pattern = /s$/;
2) RegExp()构造函数
var pattern = new RegExp("s$");
2. 直接量字符
正则表达式中所有字母和数字都是按照字面含义进行匹配的。
字符 匹配
-----------------------
字母和数字 自身
\t 制表符
\n 换行符
\v 垂直制表符
\f 换页符
\r 回车符
\xnn 由十六进制数nn指定的拉丁字符 \x0A => \n
\uxxxx 由十六进制xxxx指定的Unicode字符,例如 \u0009 => \t
\cX 控制字符 ^X,例如 \cJ 等价于换页符 \n
3. 字符类
将直接量字符单独放在方括号内就组成了字符类。一个字符类可以匹配它所有包含的任意字符。
[...] 方括号内的任意字符 返回值为 方括号内的每一个字符 单独打印出来
[^...] 不在方括号内的任意字符 返回值为 不是方括号内的每一个字符
特殊字符类
. 除换行符和其他Unicode行 终止符 之外的任意字符
\w 任何ASCII字符,等价于[a-z A-Z 0-9] 包括下划线_也可以打印(属于一个字符)
\W 任何非ASCII字符组成的,等价于[^a-zA-Z0-9_]
\s 任何Unicode空白符:空格,制表符,回车
\S 任何非Unicode空白符的字符
\d 任何ASCII数字,等价于 [0-9]
\D 任何非ASCII数字之外的任意字符,等价于 [^0-9]
[\b] 匹配一个单词边界,也就是单词和空格之间的位置 不匹配任何字符 退格直接量(特例)
4. 重复 一定要用在子表达式之后
{n,m} 匹配前一项至少n次,但是不超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次,等价于{0,1}
+ 匹配前一项1次或者多次,等价于{1,}
* 匹配前一项0次或者多次,等价于{0,} 包括空格
^ 与字符串开始的地方匹配,不匹配任何字符
$ 与字符串结束的地方开始匹配,不匹配任何字符
\b 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符
例如:
/[abc]/ 匹配"a" "b" "c"中任意一个字符
/[^abc]/ 匹配"a" "b" "c"之外的任意一个字符
/\d{2,4}/ 匹配2~4个数字
/\w{3}\d?/ 匹配三个字符或和一个可选的数字
/\s+java\s+/ 匹配前后带有一个或多个空格的字符串"java"
5. 重复方式
贪婪重复
匹配重复字符时是尽可能多地匹配
非贪婪重复
在待匹配的字符后跟随一个问号即可: ?? +? *? {1,5}?
例如:
/a+/ 可以匹配一个或者多个连续的字母a, 当使用"aaa"作为匹配字符串时正则表达式会匹配它的三个字符
/a+?/ 可以匹配一个或者多个连续的字母a, 但是尽可能少地匹配。只能匹配第一个a
6. 选择
使用字符 "|" 分割供选择的字符。选择项的尝试匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。/ab|cd|ef/ 可以匹配 "ab"或者"cd"或者"ef"
//test() 执行检测 返回Boolean
exec(); 执行检查 执行完 就返回 维护一个起始索引 0 index input
/【ab|cd|ef】/ 匹配成单个 a b c d e f
7. 分组
"()"作用:
1) 把单独的项组合成子表达式
以便可以像处理一个单元那样用"|""*""+""?"对单元内的项进行处理
/java(script)?/ 可以匹配字符串java,后面的script可以有也可以没有
/(ab|cd)+|ef/ 可以匹配"ef",也可以匹配"ab""cd"一次或者多次
2) 在完整的模式中定义子模式
当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分。
/[a-z]+\d+/ 一个或者多个小写字母后跟随一个或者多个数字
(/[a-z]+(\d+)/) 可以抽出每个匹配末尾的数字
3) 在同一正则表达式后面引用前面的子表达式。
\1 引用第一个带圆括号的子表达式
/([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/ \2 引用 ([Ss]cript)
对正则表达式中前一个子表达式的引用,并不是指对子表达式模式的引用,而是对与那个模式相匹配的文本的引用
例如:
/['"][^'"]*['"]/ 匹配单引号或者双引号内的0个或者多个字符,但是它并不要求左侧和右侧的引号匹配
/(['"])[^'"]*\1/ 匹配单引号或者双引号内的0个或者多个字符,但是它要求左侧和右侧的引号匹配
8. 指定匹配位置
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个单词的边界,即位于字符\w和\W之间的位置,或者位于字符\w和字符串的开头或结尾之间的位置。
\B 匹配非单词边界的位置
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p) 零宽负向先行断言,要求接下来的字符不与p匹配
9. 修饰符
不是出现在两条斜线之间,而是出现在第二条斜线之后。
new RegExp("","igm")
i 说明匹配模式匹配是不区分大小写
g 说明模式匹配应该是全局的
m 用以在多行模式中执行匹配。
/java$/im 可以匹配"java",也可以匹配"java\nis fun"
2. Javascript中 String对正则表达式的支持
1. search()
参数为一个正则表达式。如果参数不为正则表达式,则先通过RegExp将其转换为构造函数。不支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回-1。
"JavaScript".search(/script/i); //返回4
2. replace()
用以执行检索和替换操作。第一个参数是正则表达式,第二个参数是要替换的字符串。
text.replace(/javascript/gi,"JavaScript"); //不区分大小写将所有javascript转换为JavaScript
3. match()
最常用的正则表达式方法,参数为正则表达式。返回由匹配结果组成的数组。
当正则表达式中没有g修饰符的时候,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,剩余的元素则是由正则表达式中用圆括号括起来的子表达式。如果该正则表达式设置为修饰符g,则该方法返回的数组包含字符串中所有匹配结果。
"1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "visit my blog at http://www.briup.com/~ee";
var result = text.match(url);
if(result!=null){
var fullurl = result[0];
var protocol = result[1];
var host = result[2];
var path = result[3];
}
是一个描述字符模式的对象.
1.创建方式
1) 正则表达式直接量
var pattern = /s$/;
2) RegExp()构造函数
var pattern = new RegExp("s$");
2. 直接量字符
正则表达式中所有字母和数字都是按照字面含义进行匹配的。
字符 匹配
-----------------------
字母和数字 自身
\t 制表符
\n 换行符
\v 垂直制表符
\f 换页符
\r 回车符
\xnn 由十六进制数nn指定的拉丁字符 \x0A => \n
\uxxxx 由十六进制xxxx指定的Unicode字符,例如 \u0009 => \t
\cX 控制字符 ^X,例如 \cJ 等价于换页符 \n
3. 字符类
将直接量字符单独放在方括号内就组成了字符类。一个字符类可以匹配它所有包含的任意字符。
[...] 方括号内的任意字符 返回值为 方括号内的每一个字符 单独打印出来
[^...] 不在方括号内的任意字符 返回值为 不是方括号内的每一个字符
特殊字符类
. 除换行符和其他Unicode行 终止符 之外的任意字符
\w 任何ASCII字符,等价于[a-z A-Z 0-9] 包括下划线_也可以打印(属于一个字符)
\W 任何非ASCII字符组成的,等价于[^a-zA-Z0-9_]
\s 任何Unicode空白符:空格,制表符,回车
\S 任何非Unicode空白符的字符
\d 任何ASCII数字,等价于 [0-9]
\D 任何非ASCII数字之外的任意字符,等价于 [^0-9]
[\b] 匹配一个单词边界,也就是单词和空格之间的位置 不匹配任何字符 退格直接量(特例)
4. 重复 一定要用在子表达式之后
{n,m} 匹配前一项至少n次,但是不超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次,等价于{0,1}
+ 匹配前一项1次或者多次,等价于{1,}
* 匹配前一项0次或者多次,等价于{0,} 包括空格
^ 与字符串开始的地方匹配,不匹配任何字符
$ 与字符串结束的地方开始匹配,不匹配任何字符
\b 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符
例如:
/[abc]/ 匹配"a" "b" "c"中任意一个字符
/[^abc]/ 匹配"a" "b" "c"之外的任意一个字符
/\d{2,4}/ 匹配2~4个数字
/\w{3}\d?/ 匹配三个字符或和一个可选的数字
/\s+java\s+/ 匹配前后带有一个或多个空格的字符串"java"
5. 重复方式
贪婪重复
匹配重复字符时是尽可能多地匹配
非贪婪重复
在待匹配的字符后跟随一个问号即可: ?? +? *? {1,5}?
例如:
/a+/ 可以匹配一个或者多个连续的字母a, 当使用"aaa"作为匹配字符串时正则表达式会匹配它的三个字符
/a+?/ 可以匹配一个或者多个连续的字母a, 但是尽可能少地匹配。只能匹配第一个a
6. 选择
使用字符 "|" 分割供选择的字符。选择项的尝试匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。/ab|cd|ef/ 可以匹配 "ab"或者"cd"或者"ef"
//test() 执行检测 返回Boolean
exec(); 执行检查 执行完 就返回 维护一个起始索引 0 index input
/【ab|cd|ef】/ 匹配成单个 a b c d e f
7. 分组
"()"作用:
1) 把单独的项组合成子表达式
以便可以像处理一个单元那样用"|""*""+""?"对单元内的项进行处理
/java(script)?/ 可以匹配字符串java,后面的script可以有也可以没有
/(ab|cd)+|ef/ 可以匹配"ef",也可以匹配"ab""cd"一次或者多次
2) 在完整的模式中定义子模式
当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分。
/[a-z]+\d+/ 一个或者多个小写字母后跟随一个或者多个数字
(/[a-z]+(\d+)/) 可以抽出每个匹配末尾的数字
3) 在同一正则表达式后面引用前面的子表达式。
\1 引用第一个带圆括号的子表达式
/([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/ \2 引用 ([Ss]cript)
对正则表达式中前一个子表达式的引用,并不是指对子表达式模式的引用,而是对与那个模式相匹配的文本的引用
例如:
/['"][^'"]*['"]/ 匹配单引号或者双引号内的0个或者多个字符,但是它并不要求左侧和右侧的引号匹配
/(['"])[^'"]*\1/ 匹配单引号或者双引号内的0个或者多个字符,但是它要求左侧和右侧的引号匹配
8. 指定匹配位置
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个单词的边界,即位于字符\w和\W之间的位置,或者位于字符\w和字符串的开头或结尾之间的位置。
\B 匹配非单词边界的位置
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p) 零宽负向先行断言,要求接下来的字符不与p匹配
9. 修饰符
不是出现在两条斜线之间,而是出现在第二条斜线之后。
new RegExp("","igm")
i 说明匹配模式匹配是不区分大小写
g 说明模式匹配应该是全局的
m 用以在多行模式中执行匹配。
/java$/im 可以匹配"java",也可以匹配"java\nis fun"
2. Javascript中 String对正则表达式的支持
1. search()
参数为一个正则表达式。如果参数不为正则表达式,则先通过RegExp将其转换为构造函数。不支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回-1。
"JavaScript".search(/script/i); //返回4
2. replace()
用以执行检索和替换操作。第一个参数是正则表达式,第二个参数是要替换的字符串。
text.replace(/javascript/gi,"JavaScript"); //不区分大小写将所有javascript转换为JavaScript
3. match()
最常用的正则表达式方法,参数为正则表达式。返回由匹配结果组成的数组。
当正则表达式中没有g修饰符的时候,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,剩余的元素则是由正则表达式中用圆括号括起来的子表达式。如果该正则表达式设置为修饰符g,则该方法返回的数组包含字符串中所有匹配结果。
"1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "visit my blog at http://www.briup.com/~ee";
var result = text.match(url);
if(result!=null){
var fullurl = result[0];
var protocol = result[1];
var host = result[2];
var path = result[3];
}