js正则表达式及语法

js正则表达式及语法正则:正则表达式(regularexpression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。1.定义正则表达式: a.普通方式:varreg=/表达式/附加参数 附件参数: g:代表可以进行全局匹配。 i:代表不区分大小写匹配。 m:代表可以进行多行匹配。 例子: varreg=/a*b/; varreg=/abc+f/g; b.构造函数方式:varreg

正则 :

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),
可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

1.定义正则表达式:
	a.普通方式:var reg=/表达式/附加参数
		附件参数:
		g:代表可以进行全局匹配。
		i:代表不区分大小写匹配。
		m:代表可以进行多行匹配。
		例子:
		var reg=/a*b/;
		var reg=/abc+f/g;
	b.构造函数方式:var reg=new RegExp(“表达式”,”附加参数”);
		例子:
		var reg=new RegExp(“a*b”);
		var reg=new RegExp(“abc+f”,”g”);
	
两者区别:
	a.普通方式中的表达式必须是一个常量字符串,而构造函数中的表达式可以是常量字符串,
	也可以是一个js变量,例如根据用户的输入来作为表达式参数等等:
	var reg=new RegExp(document.forms[0].exprfiled.value,”g”);
	
	b.安卓端正常,IOS端会不零宽断言,会有如下报错:
		//Invalid regular expression: invalid group specifier name
		常用零宽断言:?<=?<!?!?=
	c.ios端有些环境不支持 / / 表达式的正则,但是都支持 new RegExp()构造函数
表达式对象(RegExp)方法:
	1.exec(str),返回str中与表达式相匹配的第一个字符串,而且以数组的形式表现,
	当然如果表达式中含有捕捉用的小括号,则返回的数组中也可能含有()中的匹配字符串,例如:
	var regx=/\d+/;
	var rs=regx.exec(3432ddf53”);
	返回的rs值为:[3432]
	
	2.test(str),判断字符串str是否匹配表达式,返回一个布尔值。例如:
	var regx=/user/d+/g;
	var flag=regx.test(“user12dd”);
	flag的值为true。
	
字符串String 对象方法:
	1.match(expr),返回与expr相匹配的一个字符串数组,如果没有加参数g,
	则返回第一个匹配,加入参数g则返回所有的匹配
	例子:
	var regx=/user\d/g;
	var str=“user13userddduser345”;
	var rs=str.match(regx);
	rs的值为:[user1,user3]

	2.search(expr),返回字符串中与expr相匹配的第一个匹配的index值。
	没有匹配项时,返回-1,search() 方法不执行全局匹配,它将忽略标志 g
	例子:
	var regx=/user\d/;
	var str=“user13userddduser345”;
	var rs=str.search(regx);
	rs的值为:0

	3.replace(expr,str),将字符串中匹配expr的部分替换为str。
	另外在replace方法中,str中可以含有一种变量符号$,格式为$n,
	代表匹配中被记住的第n的匹配字符串(注意小括号可以记忆匹配)。
	进行全局替换(此时表达式必须附加参数g,否则也只是替换第一个匹配)
	例子:
	var regx=/user\d/g;
	var str=“user13userddduser345”;
	var rs=str.replace(regx,00);
	rs的值为:003userddd0045
	例子2var regx=/u(se)r\d/g;
	var str=“user13userddduser345”;
	var rs=str.replace(regx,”$1);
	rs的值为:se3userdddse45
字符组:
\b:代表着单词的开头或结尾,作为单词的分界处。
\d就是[0-9]。表示是一位数字。
\D就是[^0-9]。表示除数字外的任意字符。
\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。
\W[^0-9a-zA-Z_]。非单词字符。
\s是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。
\S[^ \t\v\n\r\f]。 非空白符。

[]的使用:  //很多元字符在字符组内都变成了普通字符
[abcdef] 这个正则表达式匹配abcdef中其中一个字母,
[.?!]这个正则表达式匹配里面三个标点符号中的其中一个。
[0-9]匹配09这段区间中任意一个数字(包括09)。
[a-z]这里就是匹配a到z这段区间其中一个字母
[0-9a-zA-Z]就是匹配 09、a到z、AZ 这三个区间的其中一个区间的其中一个字符或数字
[\s*]表示空格或者*号。
[^0-9]表示除数字外的任意字符。

量词:
{ 
   m,} 表示至少出现m次。
{ 
   m} 等价于{ 
   m,m},表示出现m次。
? 等价于{ 
   0,1},表示出现或者不出现。记忆方式:问号的意思表示,有吗?
 	//eg:a\d? 匹配的是以字符a开头的,后面跟着0个或一个数字的字符串:a、a5、a9
+ 等价于{ 
   1,},表示出现至少一次。记忆方式:加号是追加的意思,得先有一个,然后才考虑追加。
* 等价于{ 
   0,},表示出现任意次,有可能不出现。
* 
分支
(p1|p2|p3),其中p1、p2和p3是子模式,用|(管道符)分隔,表示其中任何之一	
//eg:020-88888888 (020)88888888。要让让这两种形式的写法都可以匹配,我们就要写两种形式的正则表达式
//匹配020-88888888 的正则表达式可以写为:0\d{2}-\d{8};
//匹配(020)88888888的正则表达式我们可以写成:(0\d{2})\d{8}。
//如果要使这两个正则表达式一起匹配一个字符串,
//那么就要用到“或”符号来连接他们了:0\d{2}-\d{8}|(0\d{2})\d{8} 。

林宽断言
1.先行断言   也叫零宽度正预测先行断言(?=表达式)          表示匹配表达式前面的位置 
2.后发断言        也叫零宽度正回顾后发断言        (?<=表达式)   表示匹配表达式后面的位置 
负向零宽断言 (?!表达式) 也是匹配一个零宽度的位置,不过这个位置的“断言”取表达式的反值,例如 (?!表达式) 表示 表达式 前面的位置,如果 表达式 不成立 ,匹配这个位置;如果 表达式 成立,则不匹配:同样,负向零宽断言也有“先行”和“后发”两种,负向零宽后发断言为 (?<!表达式) 

3.负向零宽后发断言(?<!表达式) 

4.负向零宽先行断言 (?!表达式) 

负向零宽断言要注意的跟正向的一样

今天的文章js正则表达式及语法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/10162.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注