5-15、正则表达式

tech2022-08-25  134

i 执行对大小写不敏感的匹配。 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 m 执行多行匹配。 方括号用于查找某个范围内的字符: [abc] 查找方括号之间的任何字符。 [0-9] 查找任何从 09 的数字。 (x|y) 查找任何以 | 分隔的选项。 元字符是拥有特殊含义的字符: \n 换行 \t 制表符Tab \d 查找数字。 \s 查找空白字符。 \b 匹配单词边界。 \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。 \u4e00-\u9fa5 中文范围 量词: n+ 匹配任何包含至少一个 n 的字符串。 n* 匹配任何包含零个或多个 n 的字符串。 n? 匹配任何包含零个或一个 n 的字符串。

什么是正则表达式? 由以下两种字符组成的文字模式 1、普通字符

字母 数字 @

2、特殊字符(有特殊含义的,例如 \ . 等)

该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

创建正则表达式

RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。

字面量或直接量 [] {} /js/ 构造函数 new Object()

使用方法:

test 找到true,找不到false exec 找到放到数组里传递回来,找不到返回null 实例:

var str = 'I love you'; var zz = /ove/; console.log(zz.test(str)); // 找到true,找不到false console.log(zz.exec(str)); // 找到放到数组里传递回来,找不到返回null

正则表达式默认是区分大小写,也可以忽略大小写 i -> ignoreCase 忽略大小写 g-> global 全局匹配 m-> multiline 多行匹配

i 执行对大小写不敏感的匹配。 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 m 执行多行匹配。 // i 案例 var str = 'I lOve you'; var zz = /ove/i; console.log(zz.test(str)); console.log(zz.exec(str)); //没有限制,也可以 var zz = /ove/igm;

构造函数写法:

var str = 'I lOve you'; var zz = new RegExp("Ove",'i'); console.log(zz.test(str)); //true console.log(zz.exec(str)); // ['Ove']

字面量和构造函数的方式的区别: 字面量方便好用,比较常用,构造函数的方式比较好用。 字面量比较难改,构造函数是字符串传进来的,可以同变量传进来,可以随便改。 示例:

var str = 'I lOve you'; var pj = 'Ove'; var zz = new RegExp(pj,'i'); console.log(zz.test(str)); console.log(zz.exec(str));

正则表达式的测试工具

\ 转义符

比如,在使匹配/的时候

var pp = '/\/\//'; //两边的 / 是原有格式上的,中间的\/代表一个/ var i = '\\\\'; //这里其实是两个 \ var n = /\\\\/; //匹配规则 console.log(n.exec(i));

普通字符转换成特殊字符:

\n 换行 \t 制表符Tab \d 查找数字。 \s 查找空白字符。 \b 匹配单词边界。

字符类: ⭐⭐⭐匹配 [] 中任意一个,然后停止

// ^ 除什么以外任意字符 var str = 'yijuhua'; var i = /[yi]/; console.log(i.test(str)); //true console.log(i.exec(str)); // ['y'] var a = /[^yi]/; console.log(i.test(str)); //true console.log(i.exec(str)); // ['j'] yi会跳过,然后找到j符合条件停止 var i = /[a-z]/; //匹配a-z var i = /[c-z]/; //匹配c-z //前面的不能大于后边的,可以等于 var i = /[a-zA-Z]/; //匹配所有大小写字母 var i= /[0-9]/; //匹配数字 var i = /[a-zA-Z0-9]/; //匹配字母数字 var i = /[a-zA-Z0-9@_]/; /./ //匹配除了换行符\n以外的所有 /\w/ /[a-zA-Z0-9_]/ /\W/ /[^a-zA-Z0-9_]/ //正则中大写都表示小写的反面 /\d/ /[0-9]/ //匹配数字 / / 匹配空格,制表符Tab同理 /\s/ 匹配空格+制表符 /\S/ 除了空格+制表符之外的所有字符

重复

var str = '112220'; var a = /\d{3}/; //匹配三次数字 var b = /\d{1,3}/; //匹配最少一个最多五个数字 console.log(a.exec(str)); //112 console.log(b.exec(str)); //112 var b = /\d{1,}/; //大于等于1 var b = /\d{,3}/; //写法错误 /\d?/ /\d{0,1}/ 0-1/\d+/ /\d{1,}/ 最少一位 /\d*/ /\d{0,}/ 最少0

综合示例:

var str = '¥18.8!'; var pj = /\d+\.?\d*/; console.log(pj.exec(str)); //18.8 /\d{1,}\.{0,1}\d{0,}/ //与上边相同

非贪婪的重复

贪婪匹配

//贪婪匹配 var str = 'aaab'; var a = /a+/; console.log(a.exec(str)); //aaa var str = 'aaab'; var a = /a+b/; console.log(a.exec(str)); //aaab

非贪婪匹配

var str = 'aaab'; var a = /a+?/; console.log(a.exec(str)); //a

正则表达式尽可能匹配

var str = 'aaab'; var a = /a+?b/; console.log(a.exec(str)); //aaab

实际应用:

var str = "<td><p>a</p></td><td><p>b</p></td>"; var s = /<td>.*<\/td>/; //贪婪匹配 console.log(s.exec(str)); //<td><p>a</p></td><td><p>b</p></td> var str = "<td><p>a</p></td><td><p>b</p></td>"; var s = /<td>.*?<\/td>/; //非贪婪匹配 console.log(s.exec(str)); //<td><p>a</p></td>

选择

| 或者

//单 var str = 'aa'; var a = /bb|aa|cc/; console.log(a.exec(str)); //aa //多 var str = 'bb aa'; var a = /bb|aa|cc/; console.log(a.exec(str)); //bb //选择最先匹配的 var str = 'ab'; var a = /a|ab/; console.log(a.exec(str)); //a

分组:

var str = 'abab'; var a = /ab+/; console.log(a.exec(str)); //ab var str = 'abab'; var a = /(ab)+/; console.log(a.exec(str)); //abab

括号怎么用:

var str = 'abcd'; var a = /(ab)c/; console.log(a.exec(str)); //abc ab 数组里有两个 //非捕获分组 var str = 'abcd'; var a = /(?:ab)c/; console.log(a.exec(str)); //abc var str = 'abcd'; var a = /(ab)(c)/; console.log(a.exec(str)); //abc ab c var str = 'abcd'; var a = /(a(b(c)))/; console.log(a.exec(str)); //["abc", "abc", "bc", "c"]

直接使用分组:

var str = 'ab cd ab'; var a = /(ab) cd \1/; console.log(a.exec(str)); //"ab cd ab", "ab" //应用 var str = '<p><a>这是一句话</a></p>'; var a = /<([a-zA-Z]+)>(.*?)<\/\1>/;//前后肯定一致,所以可以 \1 console.log(a.exec(str));

exec返回的数组自带的属性: index: 匹配的是从第几位开始 input: 匹配的字符串

位置匹配之首位匹配

var str = 'yiju'; var a = /^yi/; //这里的^是必须从yi开头 console.log(a.exec(str)); console.log(a.test(str)); // true

注意

/[^0-9]/ //这个是非数字

尾部匹配(位置匹配)

$

var str = 'yiju'; var a = /ju$/; //这里的^是必须从ju结尾 console.log(a.exec(str)); // ju console.log(a.test(str)); // true

示例: 输入价格验证:这的验证条件是全部都是数字

var str = '456645'; var a = /^\d+$/; //从开头到结束都是数字组成 console.log(a.exec(str)); // console.log(a.test(str)); //true /\D/ ⭐非数字

单词边界匹配(位置匹配)

/\b/ 匹配单词边界 var str = 'qwet'; var a = /\bqwet\b/; // \b是边界 这里的边界时首尾 console.log(a.exec(str)); //qwet console.log(a.test(str)); //true //空格边界 var str = 'qw et'; var a = /qw\b/; // w后的边界 console.log(a.exec(str)); // qw console.log(a.test(str)); // true

\b 注意,是单词边界

//@不是单词 var str = '@@@qwet@@@'; var a = /\bqwet\b/; // qwet是单词,@不是单词,所以能匹配到 console.log(a.exec(str)); // qwet console.log(a.test(str)); // true

RegExp对象的实例方法

RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。

//构造函数 new RegExp("js"); var a = "js"; new RegExp(a);

匹配一个 /

//自变量的写法: /\\/ //构造函数的写法: new RegExp('\\\\');

RegExp的实例方法:

var a = /js/; var a = new RegExp('js'); //同上

实例方法:

a.test a.exec

a.lastIndex非全局匹配的时候是0,全局匹配的时候会发生变化,值是匹配上的字符的下一个位置

var str = "js js js"; var a = /js/g; // 获取全局 console.log(a.lastIndex); //0 console.log(a.exec(str)); //js 第一个js console.log(a.lastIndex); //2 console.log(a.exec(str)); //js 第二个js console.log(a.lastIndex); //5 console.log(a.exec(str)); //js 第三个js console.log(a.lastIndex); //8 console.log(a.exec(str)); //null console.log(a.lastIndex); //0 console.log(a.exec(str)); //js 第一个js console.log(a.lastIndex); //2

怎么获取所有的js:

其他方法:继承过来的方法: toString 对象转换成字符串 valueOf 返回他本身

RegExp的实例属性

igm实例:

true true false source 返回字面量形式返回的字符串

字符串与正则表达式相关的方法

search 搜寻,字符串的方法

var str = "html js"; var a = /js/; console.log(str.search(a)); //5 var str = "html js js"; var a = /js/g; console.log(str.search(a)); //5 var str = "html js js"; console.log(str.search('js')); //5

match 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

var str = "html js js"; var a = /js/; console.log(str.match(a)); // ['js'] var str = "html js js"; var a = /js/g; console.log(str.match(a)); // ["js", "js"] var str = "html js js"; var a = /(j)s/g; //无视分组,和exec的区别 console.log(str.match(a)); // ["js", "js"]

replace方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

var str = "html js js"; var a = /js/; console.log(str.replace(a,'css')); // html css js var str = "html js js"; var a = /js/g; console.log(str.replace(a,'css')); // html css css var str = "2020-02-09"; var a = /-/g; console.log(str.replace(a,'.')); // 2020.02.09

⭐⭐⭐ var str = "中国队和美国队以及韩国队"; var a = /中国|美国|韩国/g; console.log(str.replace(a,'*')); // *队和*队以及*队

QQ、昵称和密码

去除字符串首尾的空白字符

方法一: 方法二:

转驼峰

匹配html标签

邮箱

url

最新回复(0)