美文网首页
RegExp记录

RegExp记录

作者: HupuJRs001 | 来源:发表于2021-06-29 14:10 被阅读0次
断言 :表示一个匹配在某些条件下发生。断言包含先行断言、后行断言和条件表达式。
字符类 :区分不同类型的字符,例如区分字母和数字。
组和范围:表示表达式字符的分组和范围。
量词 :表示匹配的字符或表达式的数量。
UniCode转义 :基于 unicode 字符属性区分字符。例如大写和小写字母、数学符号和标点。
? 非贪婪 、贪婪模式 ;

如果?紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。例如,对 "123abc" 使用 /\d+/ 将会匹配 "123"(贪婪模式),而使用 /\d+?/ 则只会匹配到 "1" (非贪婪模式)。

(x)

括号,它在正则表达式中常用作记忆设备。即这部分所匹配的字符将会被记住以备后续使用
其中括号被称为捕获括号。
模式 /(foo) (bar) \1 \2/ 中的 '(foo)' 和 '(bar)' 匹配并记住字符串 "foo bar foo bar" 中前两个单词。模式中的 \1\2 表示第一个和第二个被捕获括号匹配的子字符串,即 foobar,匹配了原字符串中的后两个单词。注意 \1\2、...、\n 是用在正则表达式的匹配环节,详情可以参阅后文的 \n 条目。而在正则表达式的替换环节,则要使用像 $1$2、...、$n 这样的语法,例如,'bar foo'.replace(/(...) (...)/, '$2 $1')$& 表示整个用于匹配的原字符串。

image.png
交换字符串位置 demo
image.png
x(?=y) 匹配'x'仅仅当'x'后面跟着'y'.这种叫做先行断言

例如,/Jack(?=Sprat)/会匹配到'Jack'仅当它后面跟着'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’仅当它后面跟着'Sprat'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。

(?<=y)x 匹配'x'仅当'x'前面是'y'.这种叫做后行断言。

例如,/(?<=Jack)Sprat/会匹配到' Sprat '仅仅当它前面是' Jack '。/(?<=Jack|Tom)Sprat/匹配‘ Sprat ’仅仅当它前面是'Jack'或者是‘Tom’。但是‘Jack’和‘Tom’都不是匹配结果的一部分。

x(?!y) 仅仅当'x'后面不跟着'y'时匹配'x',这被称为正向否定查找。

例如,仅仅当这个数字后面没有跟小数点的时候,/\d+(?!.)/ 匹配一个数字。正则表达式/\d+(?!.)/.exec("3.141")匹配‘141’而不是‘3.141’

(?<!y)x 仅仅当'x'前面不是'y'时匹配'x',这被称为反向否定查找。

例如, 仅仅当这个数字前面没有负号的时候,/(?<!-)\d+/ 匹配一个数字。
/(?<!-)\d+/.exec('3') 匹配到 "3".
/(?<!-)\d+/.exec('-3') 因为这个数字前有负号,所以没有匹配到。

相关文章

网友评论

      本文标题:RegExp记录

      本文链接:https://www.haomeiwen.com/subject/xnvhultx.html