正则表达式

275 阅读2分钟

低频会用到这个技能,学了又贼容易忘。 只能做笔记了,记一下项目中用到的部分。

特殊字符

  • \d         单个数字[0-9]

  • \D         除了[0-9]

  • [ .]          一个字符集合,匹配方括号中的任意字符,包括转义序列。

  • \w          匹配一个单个字符(字母、数字、下划线),等价于[A-Za-z0-9_]

  • \w+    匹配多个字符                 类比* 匹配

  • \W         匹配到非单个字符 

  • [0-9.]     匹配0-9和小数点 .              多个数值方式 [0-9.]+

  • \s          匹配一个空白字符,包括空格、制表符、换行符、换页符

  • \S          非空白字符,

  • i            忽略大小写

  • g           全局

  • $           字符串结尾

  • ()          匹配括号里面表达式,作为子字符串。 也叫 捕获括号。

  • {}          标记限定符,匹配次数。

  • +         匹配签名表达式1次,或者多次。 等价于{1,}

  • *          匹配前一个表达式0次或者多次。 等价于{0,}

  • ?        ? 问号代表前面的字符最多只可以出现一次(0次、或1次)

  • ^         匹配字符串开始的地方

  • |           选择

    表达式例子: /[1-9][0-9]*/g 匹配结果: 0 1 10 123

    表达式例子:/[0-9]{1,2}/

    表达式例子: /[1-9][0-9]{0,1}/

    表达式例子: /<.*>/ 说明: *是贪婪类型 结果:

    dafasdfasdf

    表达式例子: /<.*?>/ 相同效果</w+?> 说明: ? 是非贪婪 结果:

定位符

  • ^            匹配输入字符串开始的地方

  • $             匹配输入字符串结束的地方

  • \b           匹配单词边界,即字与空格间的位置

  • \B           单词中间位置匹配,非边界

    表达式例子: /^Chapter [1-9][0-9]{0,1}/

    表达式例子: /^Chapter [1-9][0-9]{0,1}$/

    表达式例子: /ter\b/ 匹配以ter结尾的单词 /\bCha/ 匹配以Cha开头的单词

    表达式例子: /Bapt/ 匹配单词内包含 apt的单词

选择

用()将所有选型括起来,相邻选项用 | 分隔开。   

回溯引用

后面部分引用前面已经匹配到的子字符串。(*)

回溯引用的语法像\1,\2,....,其中\1表示引用的第一个子表达式,\2表示引用的第二个子表达式,以此类推。而\0则表示整个表达式。

回溯引用在替换字符串中十分常用。

举例:用$1,$2...来引用要被替换的字符串。

var str = 'abc abc 123';
str.replace(/(ab)c/g,'$1eee');
// 得到结果 'abeee abeee 123'

圆括号会有一个副作用,使相关的匹配会被缓存。此时用 非捕获正则  ?:  放在第一个选型前,来消除这种副作用。 

var str = 'stest000'.
str.replace(/(stest00)(?:0)/, '$1,$2')
// 返回stest00,$2
// 由于使用了非捕获正则,所以第二个引用没有值,这里直接替换为$2

前向查找

  • ?:         是非捕获元之一          引用表达式(()), 本身不被消费(?),引用(:)

  • ?=       正向预查,

    举例说明:var str = 'happy happily'; 捕获以happ开头的 副词。 表达式:happ(?=ily)

  • ?!         正向负查找

    举例说明:var str = 'happy happily';

    不要以happ开头的 副词。 表达式:happ(?!ily)

后向查找

说明:后向查找在部分浏览器里支持不好。思路:翻转字串,用正向去解决。完成再翻转就行。

  • (?<=regex)                     示例:想找到appleple, 写法:/(?<=app)ple/
  • (?<!regex)                      示例:想要查找appleple也可以这么写成/(?<!peo)ple

逻辑处理

  • 或    |

  • 非   ^和 !            [^regex]和!

  • 在字符匹配的时候,需要使用^这个元字符。

  • 只有在[]内部使用的^才表示非的关系