一:正则的创建方式。
/*1.使用构造函数创建*/
var reg1 = new RegExp('helloWorld');
var result1 = reg1.test('helloWorld js');
console.log(result1);//true
/*2.使用字面量创建*/
var reg2 = /helloWorld/;
var result2 = reg2.test('helloWorld js');
console.log(result2);//true
2.字符类。将直接量字符单独放进方括号内就组成了字符类。
正则表达式的字符类
字符 匹配
(1) [...] 方括号内的任意字符
(2) [^...] 不在方括号内的任意字符
(3) . 除换行符和其他Unicode行终止符之外的任意字符
(4) \w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
(5) \W 任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
(6) \s 任何Unicode空白符
(7) \S 任何非Unicode空白符的字符,注意\w和\S不同
(8) \d 任何ASCII数字,等价于[0-9]
(9) \D 除了ASCII数字以外的任何字符,等价于[^0-9]
(10) [\b] 退格直接量(特例)
每一种的示例如下:
*/
var reg1 = /[a-c]/;//匹配abc里面的任意字符
var result1 = reg1.test('aefg');//
console.log(result1);//true 匹配到了a字符
var reg2 = /[^a-c]/;//匹配除了abc以外的任意字符
var result2 = reg2.test('abce');
console.log(result2);//true 匹配到了e字符
var reg3 = /./;//匹配除换行符和其他Unicode行终止符之外的任意字符
var result3 = reg3.test('a');
console.log(result3);//true 匹配到了a字符
var reg4 = /\w/;//匹配任何ASCII字符组成的单词
var result4 = reg4.test('a');
console.log(result4);//true 匹配到了a字符
var reg5 = /\W/;//匹配任何不是ASCII字符组成的单词
var result5 = reg5.test(' ');//''直接是个空格符
console.log(result5);//true 匹配到了空格符
var reg6 = /\s/;//匹配任何Unicode空白符 等价于[\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
var result6 = reg6.test('\r');
console.log(result6);//true 匹配到了\r
var reg7 = /\S/;//匹配任何非Unicode空白符的字符
var result7 = reg7.test('a');
console.log(result7);//true 匹配到了a字符
var reg8 = /\d/;//匹配任何ASCII数字
var result8 = reg8.test('1');
console.log(result8);//trur 匹配到了1数字
var reg9 = /\D/;//匹配除了ASCII数字以外的任何字符
var result9 = reg9.test('a');
console.log(result9);//true 匹配到了a字符
var reg10 = /[\b]/;//匹配退格键直接量
var result10 = reg10.test('\u0008');
console.log(result10);//true 匹配到了退格键\u0008
//3.重复
//重复字符语法
/*
字符 含义
{n,m} 匹配前一项至少n此,但不能超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次,等价于{0,1}
+ 匹配前一项1次或多次,等价于{1,}
* 匹配前一项0次或多次,等价于{0,}
注意:以上列出的匹配重复字符是尽可能多地匹配。并允许后续的正则表达式继续匹配,是贪婪地匹配。非贪婪匹配是在后面加?。
/a+/正则,使用'aaa'时,正则会匹配到'aaa'。
/a+?/正则,使用'aaa'时,正则会匹配到'a',是尽可能少地匹配。
/a+b/和/a+?b/正则,使用'aaab'时,匹配到的都是'aaab',因为正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。
*/
//4.选择、分组和引用
/*
正则表达式的选择、分组和引用字符
字符 含义
| 选择,匹配的是该符号左边的子表达式或右边的子表达式
(...) 组合,将几个项组合为一个单元,生成引用
(?:...) 只组合,但是不生成引用
\n 和第n个分组第一次匹配的字符向匹配,组是圆括号中的子表达式,组索引是从左到右的左括号树,(?:...)形式的分组不编码
/a|b/匹配字符串a或者b
圆括号()的作用:
(1).把单独的项组成成子表达式
/java(script)?/匹配字符串java其后可有可无script
(2).在完整的模式中定义子模式,即从目标串中抽出和圆括号中的子模式相匹配的部分。
/[a-z]+(\d+)/匹配一个或多个小写字母后面跟随了一位或多位数字。
(3).允许在同一正则表达式的后部引用前面的子表达式,通过字符'\'后加一位或多位数字来实现的,这个数字指定了带圆括号的子表达式在正则表达式中的位置,它的位置是参与计数的左括号的位置。
对正则表达式中前一个子表达式的引用,并不是指对子表达式模式的引用,而值的是与那个模式相匹配的文本的引用。
/['"][^'"]*['"]/匹配的是位于单引号和双引号之内的0个或多个字符,但不要求左侧和右侧的引号匹配。
/(['"])[^'"]*\1/匹配的是位于单引号和双引号之内的0个或多个字符,但要求左侧和右侧的引号匹配。
正则表达式中不允许用双引号括起的内容中有单引号,反之亦然。
除了用圆括号分组外,还可以用(?:xx)来进行分组,但是(?:xx)不生成引用。
*/
//4.指定匹配位置
/*
正则表达式中的锚字符
字符 含义
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个单词的边界
\B 匹配非单词边界的位置
(?=p) 零度正向先行断言
(?!p) 零度负向先行断言
例子:/\Bscript/匹配的字符串的左边不是单词的边界。
/javascript(?=\:)/匹配javascript后面有:的字符串
/java(?!Script)/匹配java后没有Script的字符串
*/
//5.修饰符
/*
正则表达式修饰符
字符 函数
i 执行不区分大小写的匹配
g 执行一个全局匹配,即找到所有的匹配,而不是在找到第一个之后就停止
m 多行匹配模式
*/
//第二部分.字符串支持的4种使用正则表达式的方法。
/*
(1).search()搜索,参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配的子串就返回-1,search不支持全局搜索;
console.log('javascript'.search(/Script/i));//4
console.log('javascript'.search('script'));//4 若参数不是正则,则会通过RegExp构造函数将它转换成正则表达式。
(2).replace()用以执行检索与替换操作。
console.log('javascript'.replace(/a/g,'b'));//jbvbscript
console.log('javascript'.replace('a','b'));//jbvascript 如果参数不是正则,则会直接搜索该参数
replace与()与$的联合使用
console.log('ja“va”script'.replace(/“([^"]*)”/g,'"$1"'));//ja"va"script 用于将中文的双引号替换为英文的双引号,且不改变圆括号里面的字符串内容
replace第2个参数可以是函数,函数的返回值将替换第一个参数的值:
var str = 'javascript';
console.log('javascript'.replace(/a/,function(){
return 'b';
}))//jbvascript
(3).match(),返回的是一个由匹配结果组成的数组。
console.log('1a2b13c'.match(/[a-z]/));//["a", index: 1, input: "1a2b13c", groups: undefined] 没有g就是不会进行全局搜索,只匹配第一个,返回的是个数组,第一个值是匹配的值
console.log('1a2b13c'.match(/\d+/g));//["1", "2", "13"]
(4).split()分割成数组,参数支持正则表达式。
console.log('1,2,3, 4 , 5'.split(','));//["1", "2", "3", " 4 ", " 5"]
console.log('1,2,3, 4 , 5'.split(/\s*,\s*/));//["1", "2", "3", "4", "5"] 允许,的左右两侧有空格
*/