js正则表达式的简单使用

1.js创建正则表达式

js创建正则表达式有2种方式
1.显示的使用Regex对象,

var regex = new Regex("\\d*","img");

2.采用纯文本的写法

var regex = /\d*/img;

上面2种写法是等价的,
由于JavaScript字符串中的“\”是一个转义字符,因此,使用显式构造函数创建RegExp实例对象时,应将原始正则表达式中的“\”用“\\”替换

2.正则表达式的定义

js正则表达式是perl5正则表达式语法的子集,有些perl5的正则语法并不被支持如:\a,\e,\l,\u等,(?<=)正向后行断言和(?<!)负向后行断言,(?)的语法等。
正则表达式的模式规则是由一个字符序列组成的,包括字母,数字和符号,通常匹配都是按照字符的字面含义匹配,但是还有些特殊语义的字符比如 \d匹配所有数字,特殊语义的字符让正则的功能更为强大。

3.正则表达式的字符类

字符匹配
[…]中括号内任意的字符,例如[abc]表示匹配abc中的一个
[^…]除了中括号内任意的字符,例如[^abc]表示匹配不在abc中的任意一个字符
.点表示任意字符
\w等价于[a-zA-Z0-9]
\W等价于[^a-zA-Z0-9]
\s任何unicode 空白符
\S任何非unicode 空白符
\d等价于[0-9]
\D等价于[^0-9]
\n换行符
\r回车
\t制表符

3.正则表达式的重复字符语法

字符含义
{n,m}前一项至少匹配n次,最多匹配m次
{n,}前一项至少匹配n次,或更多次
{n}前一项匹配n次
前一项0次或者一次,至多一次
+前一项匹配1次或多次
*匹配0次或多次

当我们匹配重复的字符串时,用以上例子,它会尽量的多去匹配,我们称之为贪婪匹配,如果要尽可能少的匹配我们称之为非贪婪匹配,非贪婪在前面的字符的基础上加上?,例如{1,6}?,??,+?,*?,
例如

<script>
			var regex1 = /a+?/;
			var regex2 = /a+/;
			var str = "aaaa";
			console.info(regex1.exec(str));
			console.info(regex2.exec(str));
		</script>

匹配结果为 a,aaaa,非贪婪会尽可能的少匹配,这有时可能不是我们想要的结果

4.选择,引用,分组

4.1 选择

正则表达式的语法中,"|" 可用来表达选择项,选择项会从左到右,一旦匹配,会忽略其他匹配项,例如 /a|ab|abc/ ,字符串"abc",匹配的结果是a,

4.2 分组,引用

正则表达式的圆括号"()"有多个作用,其中一个就是可以把单独的项作为一个子表达式,以便可以用重复的字符作用一个整体,例如 /a(bc)+/,表示匹配 a后面跟多个bc项,当目标字符串和正则表达式匹配之后,圆括号匹配的结果,会单独存贮起来,称为组,我们在正则表达式中,可以通过,\n,n表示数字,这个数字代表带圆括号的子表达式在正则表达式中的位置,可以单独引用这个组,例如 /(\d)+a\1/,会匹配以a为中心,左右2边一样的字符串。分组可以嵌套:当嵌套分组存在时,每个组的序号是从左往右,左括号的位置, 例如表达式
/(ab)*((\d+) | abc)+(\w?)/
第一个组为:(ab)
第二个组为:((\d+) | abc)
第三个组为:(\d+)
第四个组为:(\w?)

如果不想分组被引用可以使用(?:…)该表示只是分组,但是不会保存匹配的项,例如
/(?:ab)*((\d+) | abc)+(\w?)/
\1表示((\d+) | abc)匹配的项
\2表示(\d+)匹配的项
\3表示(\w?)匹配的项

5.匹配的位置

正则表达式中有一类元素只匹配字符间的位置,而不是字符

字符含义
^匹配字符串开头,多行中,匹配一行的开头
$匹配字符串的结尾,多行中,匹配一行的结尾
\b退格符直接量,匹配单词边界,就是用在你匹配整个单词的时候,\b只是匹配字符串开头结尾及空格回车等的位置, 不会匹配空格符本身,很多人把\b和\s搞混了,\b只会匹配位置,不会匹配空格符本身。
\B匹配非单词边界的位置
(?=p)接下来的字符要求和p表达式匹配,匹配的结果不会包含p匹配的部分
(?!p)要求接下来的字符都不和p匹配,也只是匹配位置

例如 /abc(?=\d*)/ 有字符串"abc1234",匹配结果是abc,

6.修饰符

字符含义
i忽略大小写
g执行一个全局匹配,而不是找到一个匹配就返回,此处应了解,每一个表达式中有一个lastIndex属性,从0位置开始,如果为全局匹配模式,匹配成功,lastIndex将指向下一个将要匹配的字符索引的位置,如果失败将重置为0,如果不为全局匹配模式,无论成功失败都将重置为0
m多行匹配模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值