type
status
date
slug
summary
tags
category
icon
password

使用正则匹配文本

问:如何匹配华氏度 摄氏度并对其进行不一样的处理?
答:
  1. 利用()进行分组捕获,js中replace的第2个参数是函数,可以获得捕获的内容并进行处理,第一个()就是$1,第二个()$2
  1. (?:)捕获的顺序是按照括号写的顺序,所以即使是嵌套(())也会按照顺序进行捕获,如果不想捕获某一个内容((?:))可以在括号最前面写?:代表“非捕获型括号”。
  1. \s*代表匹配任何的空白。

常用简写

\t
指标符 tab键
\n
换行符
\r
回车符
\s
任何空白字符
\S
除了\s外的其他字符
\w
[0-9A-Za-z]
\W
[^0-9A-Za-z]
\d
[0-9]
\D
[^0-9]

使用正则修改文本

问:如何将数字保留后两位,如果第三位有值就保留三位
答:
  1. $1()捕获的内容。只返回匹配到的内容,就相当于把其余部分删除掉

使用正则插入文本-环视

环视结构不匹配任何字符,只匹配文本中特定的位置,与^$\b 这类元字符相似,只表示范围。

肯定顺序环视(?=)

问:如何把Jeffs 修改为 Jeff's
答:
  1. 顺序是正则匹配的顺序,正常代码是从左到右依次执行的。所以顺序环视,是看后面的内容。
  1. 环视不会进行捕获,也就不会有$1$2这种变量。
  1. 环视匹配的只是位置,环视代码前面的位置,也就是插入'的位置。

肯定逆序环视(?<=)

问:如何把Jeffs 修改为 Jeff's
答:
  1. 逆序环视,就是按照正则执行的反过来从右向左,这个单词前面必须是\bJeff后面必须是s\b才会匹配到。
  1. 不进行捕获,只是匹配位置,所以可以插入'进去
  1. 第一个和第二个顺序变换,但是意义是一致的。并不会影响代码的执行
  1. 这样不捕获,可以提高正则的性能。但是易读性差了很多。

其他例子(插入逗号)

问:如何给一组数字插入逗号,如123456789变为123,456,789
答:
  1. (?=(?:\d{3})+$) 只有这个表达式会把,123前面也加上逗号,所以要用(?<=\d)来限定左边必须要有数字。
  1. (?=(?:\d{3})+$)表达式就只有\d{3}这个部分,每三个数字匹配。其他元字符都是用来装饰这个部分的。+代表1到多次的3个数字组合都找出来。(?!\d)右侧不是数字就结束。
  1. 后面放g是因为要全局匹配。

四种类型的环视

类型
正则表达式
匹配成功的条件
肯定逆序环视
(?<=...)
子表达式能够匹配左侧的文本
否定逆序环视
(?<!...)
子表达式不能匹配左侧文本
肯定顺序环视
(?=...)
子表达式能够匹配右侧文本
否则顺序环视
(?!...)
子表达式不能匹配右侧文本
问: 如何表示\b
答:
  1. 表示单词的起始或结束
  1. (?<!\w)(?=\w)左侧不是,右侧是
  1. (?<=\w)(?!\w)/左侧是,右侧不是
正则表达式(一)入门正则表达式(三)原理