正则

118 阅读2分钟

regular Expression 正则表达式:

匹配原则:不回头,贪婪模式

1、转义符号 转义字符: \.

var str="我是\"abc\"";

2、修饰符:gim global(全局匹配) ignore(忽略大小写) multiline(多行匹配)

3、表达式:[]一位可匹配的字符范围

var str="TUytyeq35efdvdbgs";
//匹配2位
var reg2=/[0-9][A-z]/
console.log(reg.test(str));//true
console.log(str.match(reg));//5e
//匹配3位
var reg3=/[A-z][0-9][456]/ 
console.log(reg3.test(str));//true
console.log(str.match(reg3));//q35

5、或 |

6、元字符

\w===[0-9A-z] ,\W===[^\w]:匹配字母、数字、下划线。等价于

\d===[0-9] ,\D===[^\d]

\b===[0-9] ,\B===[^\d] 单词边界

特殊字符

image.png

定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。 定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。

image.png

限定符(量词)

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

image.png

案例

1、 ^符,

在中括号中表示取反: [^1234]表示不包含1234

其他的表示开头^abc 表示一行的开头

以abcd开头和abcd结尾

var reg=/^abcd[\w]+abcd$/g 
var reg=/^abcd.*abcd$/g`

以abcd开头或abcd结尾

var reg=/^abcd|abcd$/g`

2、正向预查 x(?=y)/ :表示以下x字符后面紧跟着y字符; x(?!y):表示以下x字符后面紧跟着不是y字符

var str="1381234567813812345678";
reg=/3(?=8)/g

3、子表达式 反向引用

var str="cccbbbaaadddabcd";
var reg=/(\w)\1\1/g
console.log(reg.test(str));//true
console.log(str.match(reg));// ["ccc", "bbb", "aaa", "ddd"]

4、贪婪模式和非贪婪模式 ?

贪婪模式:最大限度匹配

非贪婪模式:最小限度匹配 ?? *? +?

5、捕获分组 不捕获分组

var xp='abcd';
// ["abc", "b", "c", index: 0, input: "abcd"]
console.log(xp.match(/(?:a)(b)(c)/));

子表达式中的元素b和c表示捕获

(?:a)表示不捕获

正则方法:

1、test:判断是否存在:

2、exec 根据lastIndex,循环匹配 返回一个数组

2、string.prototype.math 返回一个数组包含所有的匹配成功的元素

var str = "123123123123";
var reg = /123/g
console.log(reg.test(str)); //true
console.log(str.match(reg)); //  ["123", "123", "123", "123"]
console.log(reg.exec(str),reg.lastIndex); //["123", index: 0, input: "123123123123"] 3
console.log(reg.exec(str),reg.lastIndex); //["123", index: 3, input: "123123123123"] 6

//12,3456,7890
console.log('1234567890'.replace(/(?=\B(.{4})+$)/g,','));
//1234-5678-90
console.log('1234567890'.replace(/(.{4})/g,'$1-'));
//保留2位有效数字
console.log(/^[1-9]+|^0\.?(\.\d{2})?$/g.test('0.35'));