正则表达式
- 正则表达式用于定义一些字符串的规则
- 计算机可以根据正则表达式,来检查一个字符串是否符合规则
- 获取字符串中符合规则的内容提取出来
创建正则表达式的对象
-
语法:var 变量 = new RegExp(“正则表达式”,“匹配模式”)
-
test():用于检查一个字符串是否符合正则表达式的规则,符合返回true,不符合返回false
这个正则表达式可以来检查一个字符串中是否含有a
var reg = new RegExp("a"); var str = "a"; console.log(reg);//输出/a/ console.log(reg.test("sdafg"));//输出true(只要有小写a就是true)
-
用字面量创建正则表达式,使用字面量创建正价简单,使用构造函数更加灵活
语法:var 变量 = /正则表达式/匹配模式
var reg = /a/i; console.log(reg.test("sdAfg"));//输出true
-
-
在构造函数中可以传递一个匹配模式作为第二个参数
- 可以是 i : 忽略大小写
- g :全局匹配模式
var reg = new RegExp("a","i"); console.log(reg.test("sdAfg"));//输出true
正则表达式的用法
-
检查一个字符串是否有a或b
reg = new RegExp("a|b","i"); console.log(reg.test("sdBfg"));//输出true
-
检查一个字符串中是否含有字母
reg = /[a-z]/i; console.log(reg.test("sdBfg"));//输出true(区分大小写)
-
检查一个字符串中是否含有abc或adc或aec
reg = /a[bde]c/i; console.log(reg.test("sabcg"));//输出true(区分大小写)
-
除了^
reg = /[^ab]/;//(除了ab有其他的) console.log(reg.test("ab1"));//输出true(区分大小写) reg = /[^0-9]/;//(除了数字有其他的)
-
将一个字符串拆分为一个数组
方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符
var str = "1a2b3c4d5f6e7"; var result = str.split(/[A-z]/); console.log(result);//返回1,2,3,4,5,6,7
-
search()
- 可以搜索字符串中是否含有指定内容
- 如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回-1
- 他可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串
- 不能全局查找只会查找第一个,即使设计全局匹配也一样
var str = "hello abc hello aec afc"; var result = str.search("abcd"); console.log(result);//返回-1 result = str.search("abc"); console.log(result);//返回6 comsole.log(str.search(/a[bef]c/));//返回6
-
match()
- 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
- 默认情况下我们的match只会找到第一个符合要求的内容,找到后就停止检索,我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
- 可以为一个正则表达式设置多个匹配模式,且顺序无所谓
- match()会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果
var str = "1a2b3c4d5f6eABF";
var result = str.match(/[a-z]/g);
console.log(result);//返回a,b,c,d,e,f
result = str.match(/[a-z]/ig);
console.log(result);//返回a,b,c,d,e,f,A,B,F
-
replace()
-
可以将字符串中指定内容替换为新内容
-
参数:
1.被替换内容,可以接受一个正则表达式作为参数
2.新的内容
-
默认只会替换第一个
-
var str = "1a2a3a4d5f6eABF";
var result = str.replace("a","@_@");
console.log(result);//返回1@_@2a3a4d5f6eABF
var result = str.replace(/a/g,"@_@");
console.log(result);//返回1@_@2@_@3@_@4d5f6eABF
-
量词
- 通过量词可以设置一个内容出现的次数
- 量词只对前边的一个内容起作用
- {n}正好出现n次
- {m,n}出现m-n次
- {m,}出现m次及以上
- +表示至少一个,相当于{1,}
- *表示0个及以上,有没有都行
- ?表示0或1个
var reg = /a{3}/; console.log(reg.test("aaabc"));//返回true reg = /ab{3}/; console.log(reg.test("abbbc"));//返回true reg = /(ab){3}/; console.log(reg.test("abababbbc"));//返回true reg = /(ab){1,3}/; console.log(reg.test("ababccc"));//返回true reg = /a{3,}/; console.log(reg.test("aaaaaaaaaabccc"));//返回true reg = /ab+c/; console.log(reg.test("aabccc"));//返回true reg = /ab*c/; console.log(reg.test("aaaaaaaaaabccc"));//返回true reg = /ab?c/; console.log(reg.test("aaaaaaaaaabccc"));//返回true
-
检查一个字符串是否以某个元素开头
-
^表示开头 [^]表示除了
var reg = /^a/; console.log(reg.test("abcabc"));//返回true
-
$表示结尾
var reg = /$a/; console.log(reg.test("abcabca"));//返回true var reg = /^a$/;//只能出现一个a,即开头的a也得是结尾的a console.log(reg.test("a"));//返回true
-
-
. 表示任意字符
- 如果要检测 . 则需要转义字符 \ . 表示 . \ \表示\
- 在使用构造函数时,由于他的参数是字符转,而\ 是转义字符,如果要用\ 则要用\ \表示
var reg = /./; console.log(reg.test("@#$%^"));//返回true reg = /\./; console.log(reg.test("@#$%^"));//返回false reg = new RegExp("\\."); console.log(reg.test("!@$#^"));//返回false console.log(reg);//返回\.
-
\字母代表的意思
-
\w:任意字母、数字、_
-
\W: 除了字母、数字、_
-
\d:任意数字
-
\D:除了数字
-
\s:空格
-
\S:除了空格
-
\b:单词边界
-
\B:除了单词边界(是否是一个独立的单词,也就是检查这个单词两边有没有空格)
var reg = /child\b/; console.log(reg.test("children"));//false
-
-
去除字符串前后的空格
var str = " hel lo ";
str = str.replace(/^\s*|\s*$/g,"");
console.log(str);