正则表达式

正则表达式

正则表达式:(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

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

正则表达式的使用:正则表达式使用:单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

声明方式

var reg1 = new RegExp();
var reg2 = /"男|女"/;

复杂数据类型: array object function RegExp

正则里面的tes方法:
语法::正则对象.test(“需要检测的字符串”)
**注意:**如果这个检测的字符串满足正则对象的要求,就返回true,否则返回false

var reg = /张|李/;

console.log(reg.test("张三在吃李子")); true  满足了正则的张  李
console.log(reg.test("张三在吃桃子"))     true   满足了正则的张 
console.log(reg.test("李四在吃桃子"));   true   满足了正则的李
console.log(reg.test("李四在吃李子"));   true   满足了正则的李
console.log(reg.test("王五在吃桃子"));  既没有张  也没有李,所以不符合条件  返回false  

正则表达式的匹配
例如这样一个表达式:
^[0-9]+abc$
^ :为匹配输入字符串的开始位置
[0-9]+:表示匹配多个数字
[0-9]:表示匹配单个数字
abc 匹 配 字 母 a b c 并 以 a b c 结 尾 , 匹配字母abc 并以abc结尾, abcabc为匹配输入字符串的结束位置
关系图如下所示:以上的正则表达式可以匹配 runoob、runoob1、run-oob、run_oob, 但不匹配 ru,因为它包含的字母太短了,小于 3 个无法匹配。也不匹配 runoob$, 因为它包含特殊字符。
例1:
匹配以数字开头,并以 abc 结尾的字符串。

var str = "123abc";
var patt1 = /^[0-9]+abc$/;
document.write(str.match(patt1));

打印结果:123abc

例2:
从字符串 str 中提取数字部分的内容(匹配一次):

var str = "abc123def";
var patt1 = /[0-9]+/;
document.write(str.match(patt1));

打印结果:123

正则表达式字符分类
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

普通字符
普通字符包括:没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

非打印字符
非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:在这里插入图片描述
特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoo*b 中的 ,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 : runo*ob 匹配 runoob。

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则

表达式中的特殊字符:在这里插入图片描述
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

正则表达式的限定符有:
在这里插入图片描述

例3:
以下正则表达式匹配一个正整数,[1-9]设置第一个数字不是 0,[0-9]* 表示任意多个数字:

/[1-9][0-9]*/

预定义类:就是RegExp中已经实现给他赋予了特殊含义的字符
.(点)【^\n\r】:除了回车和换行以外的任意字符:\n \r return newline
\d [0-9] 数字字符
\D 非数字字符

\w:所有的数字 字母 _
\W:非数字 字母

\s:不可见字符
\S:可见字符

/f:换页
/n:换行bai,光标到下行行首
/r:回车,du光标到本行行首
/t:水平制表
/v:垂直zhi制表
/a:蜂鸣,bai响铃
/b:回退:向后退一格
//:反斜杠
/’:单引号
/":双引号
/?:问号
/ddd:三位八进制
/xhh:二位十六进制
/0:空字符(NULL),什么都不做

或 和 类 | ()
原例:
正则里面的tes方法:
语法::正则对象.test(“需要检测的字符串”)
**注意:**如果这个检测的字符串满足正则对象的要求,就返回true,否则返回false

console.log(/zhangsan/.test("zhangzhangsansan"))  //true
console.log(/zhangsan/.test("zhangzhang.sansan")) //false
console.log(/zhangsan/.test("zhangzhangzhang"))  //false
console.log(/zhangsan/.test("zhangsanzhang"))   //true

console.log(/zhang|san/.test("zhangzhangsansan"))
console.log(/zhang|san/.test("zhangzhong.sansan"))
console.log(/zhang|san/.test("zhangzhang.sansan"))
console.log(/zhang|san/.test("zhangzhangzhang"))
console.log(/zhang|san/.test("zhangsanzhang"))

console.log(/zh(a|o)ng|san/.test("zhangzhangsansan"))
console.log(/zh(a|o)ng|san/.test("zhangzhong.sansan"))
console.log(/zh(a|o)ng|san/.test("zhangzhang.sansan"))
console.log(/zh(a|o)ng|san/.test("zhangzhangsansan"))
console.log(/zh(a|o)ng|san/.test("zhangzhangsansan"))

打印结果,全部都是true 因为都满足条件


简单类 【】
负向类 【^】
**范围类 **:[a-z] [A-Z] [0-9] [0-9a-zA-Z]

例4:
^ 匹配行或者字符串的起始位置
/d:数字字符:所以是以数字开头,所有返回true
console.log(/^\d/.test(“12345sdahjfdsljck”)); true
反之,返回false
console.log(/^\d/.test(“ssss345sdahjfdsljck”)); false

捕获的表达式,正如 [a-z]+ 指定的,包括一个或多个字母。正则表达式的第二部分是对以前捕获的子匹配项的引用,即,单词的第二个匹配项正好由括号表达式匹配。\1 指定第一个子匹配项。

注意::单词边界元字符确保只检测整个单词。否则,诸如 “is issued” 或 “this is” 之类的词组将不能正确地被此表达式识别。

例5:
查找重复的单词

var str = "Is is the cost of of gasoline going up up";
var patt1 = /\b([a-z]+) \1\b/ig;
document.write(str.match(patt1));
打印结果: Is  is of of up up

var str = “Is the is cost of of gasoline going up up”;

正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。

表达式的结尾处的不区分大小写 :i 标记指定不区分大小写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值