正则断言
Assertions include boundaries, which indicate the beginnings and endings of lines and words, and other patterns indicating in some way that a match is possible (including look-ahead, look-behind, and conditional expressions).
断言是正则表达式组成的一部分,包含两种断言。本文记录了一些常用断言。
边界类断言
^
匹配输入的开头。在多行模式匹配中,^
在换行符后也能匹配。
/^A/.test('Apple'); |
$
匹配输入的结尾。在多行模式匹配中,$
在换行符前也能立即匹配。
/e$/.test('Apple'); |
其它断言
x(?=y)
向前断言。x 被 y 跟随时匹配 x,匹配结果不包括 y。
举例:
/Jack(?=Sprat)/.exec('JackSprat'); |
x(?!y)
向前否定断言。x 没有被 y 紧随时匹配 x,匹配结果不包括 y。
举例,匹配小数点后的数字:
/\d+(?!\.)/.exec('3.1415926'); |
(?<=y)x
向后断言。x 跟随 y 的情况下匹配 x,匹配结果不包括 y。
举例:
/(?<=Jack)Sprat/.exec('JackSprat'); |
(?<!y)x
向后否定断言。x 不跟随 y 时匹配 x,匹配结果不包括 y。
举例,匹配小数点前的数字:
综合举例
匹配二级域名
匹配某个完整域名中的二级域名:
/\w+(?=\.daily\.xoyo)/.exec('https://tg.daily.xoyo.com/'); |
社交场景
比如,某条 ugc 内容包含以下规则:
@某人
表示 @#某话题
表示话题[某表情]
表示表情
某个字符串如下:
const str = '@大吧主 @小吧主 你们好,什么时候能把我的号解封[微笑][微笑] #狗管理 #玩不了了'; |
获取所有 @ 人
str.match(/(?<=@).+?(?=\s|$)/g) |
获取所有话题
str.match(/(?<=#).+?(?=\s|$)/g); |
获取所有表情
str.match(/(?<=\[).+?(?=\]|$)/g); |
一次性获取所有特殊内容
str.match(/(?<=@).+?(?=\s|$)|(?<=#).+?(?=\s|$)|(?<=\[).+?(?=\]|$)/g); |