正则表达式

因为最近刷题时,老是遇到精彩的正则表达式的使用方式,于是在这里进行一个集中的复习记录,这里主要记录正则表达式中各种符号的匹配对象,与复杂的符号匹配对象示例。
参考对象:https://deerchao.cn/tutorials/regex/regex.htm

符号 匹配对象 示例
i 执行对大小写不敏感的匹配
g 执行全局匹配
m 执行多行匹配
. 查找单个字符,除了换行和行结束符
* 匹配任意零个、单个或多个字符(除换行符以外) *.txt 匹配所有的 txt 文件
+ 匹配一个或更多个 \d+ 匹配一个或多个数字
? 除换行符以外的任意一个字符 c?t 匹配所有以 c 开头,t 结尾的三个字母的字符串
^ 匹配字符串的开始,匹配一个位置
$ 匹配字符串的结束,匹配一个位置
\ 转义字符,用于查找字符本身 . 匹配 “.” 本身
[ ] 匹配括号内指定的字符
'|' 分枝符号 | , 用来把不同的规则分隔开,相当于if else 0\d{2}-\d{8}|0\d{3}-\d{7}可以匹配两种情况
一是“3位数字 - 8位数字”(如010-12345678)
二是“4位数字 - 7位数字” (如0376-2233445)
{n} 匹配 {n} 前面的字符 n 个 \d{2} 匹配2个数字,
\d{3,} 匹配3到n个数字,
\d{5,12} 匹配5到12个数字
( ) 分组,用于分割表达式,指定子表达式 (\d{1,3}.){3}
匹配3位数字加上1个英文句号(这个整体也就是这个分组) 重复3次
\f 匹配一个换页符
\n 匹配一个换行符
\t 匹配一个制表符 Tab
\v 匹配一个垂直制表符
\r 匹配一个回车
\e 匹配 Escape
\s 匹配任意的空白符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
\S 匹配任意不是空白符的字符 \S+ 匹配不包含空白符的字符串
\b 匹配单词的分界处 \bhi\b 精准匹配 hi 这个单词
\B 匹配不是单词开头或结束的位置
\w 匹配一位字母、数字、下划线、汉字
\W 匹配任意不是字母,数字,下划线,汉字的字符
\z 字符串结尾,类似 $
\Z 字符串结尾或行尾
\d 匹配一位数字
\D 匹配任意非数字的字符
\A 匹配字符串开头,类似 ^
^ 除xxx之外的任意字符 [^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
(?=exp) 零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp \b\w+(?=ing\b)
匹配以ing结尾的单词的前面部分(除了ing以外的部分)匹配I'm singing while you're dancing.时,它会匹配sing和danc
(?<=exp) 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp (?<=\bre)\w+\b
会匹配以re开头的单词的后半部分(除了re以外的部分),匹配reading a book时,它匹配ading
(?!exp) 零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp \d{3}(?!\d) 匹配三位数字,而且这三位数字的后面不能是数字
\b((?!abc)\w)+\b 匹配不包含连续字符串abc的单词。
(?<!exp) 零宽度负回顾后发断言,断言此位置的前面不能匹配表达式exp (?<![a-z])\d{7}匹配前面不是小写字母的七位数字。
(?#comment) 在正则语句中包含注释 2[0-4]\d(?#200-249) | 25[0 - 5](?#250-255)|[01]?\d\d?(?#0-199)
匹配200-249或者250-255或者0-199
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

常用正则表达式

表达式 描述
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
/^([\w+\.])+@\w+([.]\w+)+$/ 匹配正确的邮箱格式
正则的实例方法:

exec()

方法描述:检索字符串中指定的值。返回找到的值,并确定其位置。

语法:

        regObj.exec(string)

参数:

        regObj: 必需。正则表达式。
        string:必需。要检索的字符串。

返参:

        1.找到匹配,返回一个数组[val0,val1,val2,...,index,input],存放匹配结果。并更新正则表达式对象的 lastIndex 属性。

                val0:与正则匹配的全部字符串
                val1:与正则第1个子表达式匹配的文本
                val2:与正则第2个子表达式匹配的文本,以此类推
                index:标示匹配文本第一个字符的位置
                input:存放被检索的字符串
        2.未找到匹配,返回 null,并将 lastIndex重置为 0 。

示例:
let regObj = /quick\s(brown).+?(jumps)/ig;
let str = "The Quick Brown Fox Jumps Over The Lazy Dog";
console.log(regObj.exec(str));
// res = [
//        0:"Quick Brown Fox Jumps",
//        1:"Brown",
//        2:"Jumps"
//        groups: undefined
//        index:4,
//        input:"The Quick Brown Fox Jumps Over The Lazy Dog"
//       ]

test()

方法描述:用来查看正则表达式与指定的字符串是否匹配。

语法:

        regexObj.test(string)

参数:

        regObj: 必需。正则表达式。
        string:必需。用来与正则表达式匹配的字符串

返参:

        1.正则表达式与指定的字符串匹配 ,返回true
        2.不匹配,返回false

示例:
let str = 'hello world!';
let result = /^hello/.test(str);
console.log(result);  // true

// 如果正则表达式设置了全局标志,test() 的执行会改变正则表达式  lastIndex 属性。
// 连续的执行test()方法,后续的执行将会从 lastIndex 处开始匹配字符串
var regex = /foo/g;

// regex.lastIndex is at 0
regex.test('foo'); // true

// regex.lastIndex is now at 3
regex.test('foo'); // false
支持正则的string的实例方法

search()

方法描述:用来检索与正则表达式相匹配的子字符串。

语法:

        strObj.search(regObj)

参数:

        strObj:必需。用来与正则表达
        regObj: 必需。正则表达式。

返参:

        1.有匹配,则返回第一个与 regexp 相匹配的子串的起始位置。
        2.无匹配,返回 -1

说明:search() 方法不执行全局匹配,它将忽略标志 g。

示例:
let str = 'hello world!';
let result = str.search(/^hello/);
console.log(result);  // 0

match()

方法描述:找到一个或多个正则表达式的匹配。

语法:

       strObj.match(searchvalue)
       strObj.match(regexp)

参数:

        searchvalue:必需。要检索的字符串值
        strObj:必需。用来与正则表达
        regexp: 必需。正则表达式。

返参:
  1. regexp 没有全局标志 g ,match()方法只执行一次匹配。
    a.无匹配,返回 null
    b.有匹配,返回存放匹配结果的数组[val0,val1,val2,...,index,input]
  2. regexp 有全局标志 g ,match()方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。
    a.无匹配,返回 null
    b.有匹配,返回存放匹配结果的数组[val0,val1,val2,...]
示例:
let str = 'hello world!';
console.log(str.match("world"));  // ["world", index: 6, input: "hello world!", groups: undefined]
console.log(str.match("worlld"));  // null

let str1 ="1 plus 2 equal 3";
console.log(str1.match(/\d+/g)); // ["1", "2", "3"]

replace()

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

语法:

       strObj.replace(regexp/substr,replacement)

参数:

        strObj:必需。用来与正则表达
        regexp/substr: 必需。规定子字符串或要替换的模式的 RegExp 对象
        replacement:必需。规定了a.替换文本。或 b.生成替换文本的函数

返参:

一个新的字符串。用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的新字符串。

说明:如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

示例:
var str = 'Twas the night before Xmas...';
var newstr = str.replace(/xmas/i, 'Christmas');
console.log(newstr);  // Twas the night before Christmas...


let str1 ="1 plus 2 equal 3";
console.log(str1.match(/\d+/g)); // ["1", "2", "3"]

split()

方法描述:把一个字符串分割成字符串数组。

语法:

       strObj.split(separator,howmany)

参数:

        strObj:必需。用来与正则表达
        separator: 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。
        howmany:可选。可指定返回的数组的最大长度,若设置此参数,返回的子串不会多于这个参数指定的数组。如果未设置,整个字符串都会被分割,不考虑它的长度。

返参:

一个字符串数组。通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。

说明:
a.返回的数组中的字串不包括 separator 自身。
b.如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

示例:
let str = 'How are you';
console.log(str.split(' ')); // ["How", "are", "you"]
console.log(str.split('')); //["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u"]
console.log("2:3:4:5".split(":")); //["2", "3", "4", "5"]
console.log("|a|b|c".split("|")); // ["", "a", "b", "c"]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容