正则断言太好用了叭!

原文连接:正则断言前端

什么是断言

断言表达的是一种位置,知足某种匹配模式的一个位置,它包含了先行断言、后行断言和条件表达式。这里主要聊一下先行断言和后行断言。vue

正则 名称 含义
x(?=y) 先行断言 匹配'x'仅仅当'x'后面跟着'y',这种叫作先行断言。

例如,/Jack(?=Sprat)/会匹配到'Jack'仅当它后面跟着'Sprat'。
x(?!y) 否认先行断言 匹配'x'仅当'x' 后面 不跟着'y',这也被称为正向否认查找。

例如,/\d+(?!.)/.exec("3.141")匹配‘141’而不是‘3.141’。
(?<=y)x 后行断言 匹配'x'仅当'x'前面是'y',这种叫作后行断言。

例如,/(?<=Jack)Sprat/会匹配到' Sprat '仅仅当它前面是' Jack '。
(?<!y)x 否认后行断言 匹配'x'仅当'x' 前面 不跟着'y',这被称为反向否认查找。

例如, /(?<!.)\d+/.exec('3.141')匹配‘3’而不是'141'。

举例几个应用场景git

社交应用

  1. @某人
var s = '项目相关各端同窗 @张三 @李四 @王五 记得下班前拆分下各自的任务。';
s.match(/(?<=@).+/g); // output: ["张三", "李四", "王五"]
复制代码
  1. #话题#
var s = '据央视网报道,#广州河涌边现大量红火蚁#,各位街坊当心留意啦。';
s.match(/(?<=#).+(?=#)/g); // output: ["广州河涌边现大量红火蚁"]
复制代码
  1. emoji表情
var emoji = [捂脸];
emoji.match(/(?<=\[).+(?=\])/g); // output: ["捂脸"]
复制代码

markdown语法

  1. 一级标题
var h1 = '#一级标题';
h1.match(/(?<=^#).+/g); // output: ["一级标题"]
复制代码
  1. 二级标题
var h2 = '##二级标题';
h2.match(/(?<=^#{2}).+/g); // output: ["二级标题"]
复制代码
  1. 引用
var quoto = '> 勾股定理指指角三角形中两指角边的平方和等于斜边的平方。'
quoto.match(/(?<=\>\s).+/g);  // output: ["勾股定理指指角三角形中两指角边的平方和等于斜边的平方。"]
复制代码
  1. 匹配行内代码块
var inlineCode = '前端主流框架包含:`vue`、`React`与`angular`等,其余非主流不胜枚举'
inlineCode.match(/(?<=`)[a-z]+?(?=`)/gi); // output: ["vue", "React", "angular"]
复制代码

欢迎补充其余应用场景......github

相关文章
相关标签/搜索