JS正则表达式

正则表达式:

  regular expression, 按照指定规则匹配对应的字符串;简写为regexregexpRE是用来描述字符排列和匹配模式的一种语法规则

作用:

  主要用于字符串的模式分割,匹配,查找及替换操作

正则的组成:

  定界符元字符模式修正符表达式

 

1.定界符

  正则表达式放在起始定界符和结束定界符之间

  正则语法结构:/ 元字符 /[修饰符]

例:var str='hello world'
console.log(str.match(/\w+/g)) //返回的值为数组类型
//检索字符串 以找到一个或多个与 regexp 匹配的文本。 regexp 具有标志 g则全局匹配,否则只匹配一次
// /g表示全局查询
// +表示匹配任何包含至少一个 n 的字符串

 

2.原子的筛选方式

1) | 匹配坚线两边的任意一个原子

注:若匹配到返回对应的字符串,若匹配不到返回空

var str='Hello World 123'
console.log(str.match(/0|1|2|3|4|5|6|7|8|9/g))

 

2) [] 匹配方括号中的任意一个原子

-: 连字符, 用于字符集范围

var str='hello world 123'
console.log(str.match(/[0123456789]/g))
console.log(str.match(/[A-Za-z]/g))
console.log(str.match(/[A-z]/g))

 

3) [^] 匹配除方括号中原子之外的任意字符

var str='Hello World 123'
console.log(str.match(/[^A-z]/g))

 

3.原子的集合

1) .    查找单个字符,除了换行和结束符。 [^\n\r]

var uname="z32ang@576245762457624_san-2!";
alert(uname.match(/./g));

 

2)  \d   匹配0-9的数字,相当于[0-9] 

var uname="z32ang@576 2457\n6245\t76\v24_san-2!";
alert(uname.match(/\d/g)); 
alert(uname.match(/[0-9]/g)); 

 

3)  \D   匹配除0-9之外的任意字符,相当于[^0-9]

alert(uname.match(/\D/g)); 
alert(uname.match(/[^0-9]/g)); 

 

4)  \s    匹配一个空白字符,相当于[\f\n\r\t\v ]

alert(uname.match(/\s/g)); 
alert(uname.match(/[\f\n\r\t\v]/g)); 

 

5)\S    匹配一个非空白字符,相当于[^\f\n\r\t\v ]

alert(uname.match(/\S/g)); 
alert(uname.match(/[^\f\n\r\t\v]/g));

 

6)  \w   匹配任意一个数字、大小写字母和下划线字符,相当于[0-9a-zA-Z_]

alert(uname.match(/\w/g)); 
alert(uname.match(/[0-9a-zA-Z_]/g)); 

 

7)  \W  匹配任意一个非数字、大小写字母和下划线字符,相当于[^0-9a-zA-Z_]

例:var uname="z32ang@576245762457624_san-2!";
alert(uname.match(/\W/g)); //@,-,!

 

4.数量限定

{}指代一个范围(用于确定符号出现的次数),限定匹配元素出现的次数

1){n} 其前面的原子连续出现n

var uname="z32ang@576 2457\n6245\t76\v24_san-2!";
alert(uname.match(/\d\d\d/g)); 
alert(uname.match(/\d{3}/g)); 

 

2){n,} 其前面的原子至少连续出现n

数字至少出现5次

alert(uname.match(/\d{5,}/g)); 

 

3) {n,m} 其前面的原子连续出现nm

alert(uname.match(/\d{3,5}/g)); 

 

4)+ 匹配任何包含至少一个 n 的字符串。

alert(uname.match(/\d+/g));
alert(uname.match(/\d{1,}/g)); 
使用+的时候会出现贪婪匹配

str="aaaaaaaaaa";
alert(str.match(/a+/)); //贪婪匹配
alert(str.match(/a+?/)); //取消贪婪匹配

 

5)* 匹配任何包含零个或多个 n 的字符串。

/*用户名-必须是字母(可以是数字)*/
var uname="ceshi";

 

6)  ? 匹配任何包含零个或一个 n 的字符串。

/*用户名-必须是字母开头,后面最多只能跟一个数字*/
var uname="ceshi45";
alert(uname.match(/[A-z]+\d?/));

 

5.模式修正符

注:模式修正符定义在结束定界符的后面;也可以同时使用多个模式修正符

1) i 执行对大小写不敏感的匹配。

2) g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

var str="Is this Is this";
console.log(str.match(/i/ig));

 

6.RegExp(正则表达式) 和字符串对象的方法

1) test

语法bool RegExpObject.test(string)

检索字符串是否匹配。返回 true false

var reg = /^1([3-8]){1}\d{9}$/;
alert(reg.test(13837160809));

 

2) exec

语法:bool RegExpObject.exec(string)

检索字符串中指定的值。返回找到的值,并确定其位置。

var str = "I like to eat apples, and my name is apple";
var reg = new RegExp("apple","g");
var result;
while(result = reg.exec(str)){
    alert(result);
    alert(reg.lastIndex);
}

 

3) Match

语法:array stringObject.match(regexp)

检索字符串 以找到一个或多个与 regexp 匹配的文本。 regexp 具有标志 g则全局匹配,否则只匹配一次,最终以数组的形式返回几多

var str="1 plus 2 equal 3";
document.write(str.match(/\d+/g))

 

4)search

字符串.search(正则对象): 查找字符串中是否存在正则对象匹配子串. 如果存在返回 该子串 第一次出现时的下标(只匹配一次); 如果不存在 则返回 -1;

var txt = /万万岁/g;
console.log(infor.search(txt));

 

5) replace

string stringObject.replace(regexp,replacement)  替换

name = "Doe, John";
console.log(name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1")); //john Doe
console.log(name) //Doe, John

 

6)split

array stringObject.split(separator,howmany)   分割成数组

var str="How1are2 you 3doing 7today?";
alert(str.split(/\s+/));

 

7)int stringObject.search(regexp)

检索字符串中第一个与 regexp 相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1

var str="I'm studying web前端!"
document.write(str.search(/web/i))

 

posted @ 2020-04-14 23:10  冉姑娘  阅读(298)  评论(0编辑  收藏  举报