Js-w3school(2020.2.5)【js正则表达式】

二十、js正则表达式

1.正则表达式是构成搜索模式的字符序列。该搜索模式可用于文本搜索和文本替换操作。
2.
在这里插入图片描述
test() 是一个正则表达式方法。它通过模式来搜索字符串,然后根据结果返回 true 或 false

var patt = /e/;//搜索’e’
patt.test("The best things in life are free!"); //返回true

exec() 方法是一个正则表达式方法。
它通过指定的模式(pattern)搜索字符串,并返回已找到的文本。如果未找到匹配,则返回 null。

/e/.exec("The best things in life are free!");//e

匹配成功返回一个数组,数组第一项是匹配结果,后面一次是捕获的分组

/abc(d)/.exec('abcd') // ["abcd", "d", index: 0, input: "abcd"]

此数组还有另外两个参数,input是输入的字符串,index表示匹配成功的序列在输入字符串中的索引位置

如果有全局参数(g),第二次匹配时将从上次匹配结束时继续

var r1 = /ab/
r1.exec('ababab') // ['ab', index: 0]
r1.exec('ababab') // ['ab', index: 0]

var r2 = /ab/g
r2.exec('ababab') // ['ab', index: 0]
r2.exec('ababab') // ['ab', index: 2]
r2.exec('ababab') // ['ab', index: 4]

这一特性可以被用于循环匹配,比如统计字符串中abc的次数

var reg = /abc/g
var str = 'abcabcabcabcabc'
var num = 0;
var match = null;
while((match = reg.exec(str)) !== null) {
    num++
}
console.log(num) // 5

search() 方法使用表达式来搜索匹配,然后返回匹配的位置。

var str = "Visit W3School";
var n = str.search(/w3school/i); //6

replace() 方法返回模式被替换处修改后的字符串。
replace([RegExp|String],[String|Function])

var str = "Visit Microsoft!";
var res = str.replace(/microsoft/i, "W3School"); //Visit W3School!

其第一个参数可以是正则表达式,如果想全局替换需添加全局参数

‘abc’.replace(/[abc]/, ‘y’) // ybc
‘abc’.replace(/[abc]/g, ‘y’) // yyy 全局替换

在第二个参数中,也可以引用前面匹配的结果

'abc'.replace(/a/, '$&b') // abbc $& 引用前面的匹配字符 ,'$&b'-'ab'
'abc'.replace(/(a)b/, '$1a') // aac &n 引用前面匹配字符的分组,'$1a'-'aa'
'abc'.replace(/b/, '$\'') // aac $` 引用匹配字符前面的字符, '$\`'-'a'
'abc'.replace(/b/, "$'") // acc $' 引用匹配字符后面的字符,"$' "-"c"

如果第2个参数是回调函数,每匹配到一个结果就回调一次,每次回调都会传递以下参数

result: 本次匹配到的结果
$1,…$9: 正则表达式中有几个(),就会传递几个参数,$1~$9分别代表本次匹配中每个()提取的结果,最多9个
offset:记录本次匹配的开始位置
source:接受匹配的原始字符串

'abc'.replace(/\w/g, function (match, $1, $2) {
    return match + '-'
})
// a-b-c-

match()方法也会返回匹配的结果,匹配结果和exec类似

'abc'.match(/abc/) // ['abc', index: 0, input: abc]
'abc'.match(/abd/) // null

如果有全局参数(g),match会返回所有的结果,并且没有index和input属性

'abcabcabc'.match(/abc/g) // ['abc', 'abc', 'abc']

split()方法使用正则,可以用指定符号分隔字符串,并返回数据

'a,b.c'.split(/,|\./) // [a, b, c]

3.修饰符:像 /microsoft/i,斜杠外面的i
在这里插入图片描述
g正则遇到第一个匹配的字符就会结束,加上全局修复符,可以让其匹配到结束

i正则默认是区分大小写的,i可以忽略大小写

m正则默认情况下,^和匹配行首和行尾,不理解就看例子

/jing$/ // 能够匹配 'yanhaijing,不能匹配 'yanhaijing\n'
/jing$/m // 能够匹配 'yanhaijing, 能够匹配 'yanhaijing\n'

/^jing/ // 能够匹配 'jing',不能匹配 '\njing'
/^jing/m // 能够匹配 'jing',能够匹配 '\njing'

4.括号表达式
在这里插入图片描述
()、[]、{} 的区别

() 的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串。

[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字。

{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配1~3个空格。

5.元字符(Metacharacter)是拥有特殊含义的字符
在这里插入图片描述
在这里插入图片描述
. 匹配除了换行符(\n)以外的任意一个字符 = [^\n]
\w = [0-9a-zA-Z_]
\W = [^0-9a-zA-Z_]
\s = [ \t\n\v]
\S = [^ \t\n\v]
\d = [0-9]
\D = [^0-9]

^在[]外表示匹配开头的意思

^abc // 可以匹配abc,但是不能匹配aabc

$表示匹配结尾的意思

abc$ // 可以匹配abc,但是不能匹配abcc

上面提到的\b表示单词的边界

abc\b // 可以匹配 abc ,但是不能匹配 abcc

\b:如abcd@ , d与@之间就可以用\b匹配 ,回车符和单词字符之间当然也可以用\b匹配,其宽度为0
6.Quantifiers 定义量词
在这里插入图片描述
(1)正则默认和人心一样是贪婪的,也就是常说的贪婪模式,凡是表示范围的量词,都优先匹配上限而不是下限

a{1, 3} // 匹配字符串'aaa'的话,会匹配aaa而不是a

有时候这不是我们想要的结果,可以在量词后面加上?,就可以开启非贪婪模式

a{1, 3}? // 匹配字符串'aaa'的话,会匹配a而不是aaa

(2)如果你想匹配xxx前不能是yyy,或者xxx后不能是yyy,那就要用到预搜索。js只支持正向预搜索,也就是xxx后面必须是yyy,或者xxx后面不能是yyy

1(?=2) // 可以匹配12,不能匹配22
1(?!2) // 可以匹配22,不能匹配12

7.在 JavaScript 中,RegExp 对象是带有预定义属性和方法的正则表达式对象。
直接量语法

/pattern/attributes

创建 RegExp 对象的语法:

new RegExp(pattern, attributes);

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值