正则表达式

一. 定义

正则表达式(Regular Expression),运用单个字符串来形貌、婚配一系列相符某个句法划定规矩的字符串。

二. 基础语法

元字符

正则表达式中有特别寄义的非字母字符

字符类

[]能够构建一个类,比方[abc],婚配含有abc
字符类取反
[^]示意婚配一个未列出的字符, 而不是婚配列出的字符

var reg=/[^ab]/g;
var string="acdadbb";
string.replace(reg,"A"); //效果为"aAAaAbb"

局限类

[],婚配一个局限,在其类内部是能够连写的,比方

[a-zA-Z] //婚配26个字母的大小写

预定义类

  1. .婚配除回车符和换行符以外的一切字符

  2. \d婚配数字字符

  3. \D婚配非数字字符

  4. \s婚配空白符

  5. \S婚配非空白符

  6. \w婚配单词字符(字母、数字下划线)

  7. \W婚配非单词字符
    注重大小写的辨别

边境

  1. ^最先

  2. $完毕

  3. \b单词边境

  4. \B非单词边境

量词

  1. 婚配之前紧邻的元素,这个元素能够不涌现,且婚配胜利(最多涌现一次)

  2. + 示意之前紧邻的元素涌现一次或许屡次,没法举行一次婚配时,会报告婚配失利(起码涌现一次)

  3. *之前紧邻的元素涌现恣意屡次或许不涌现
    字符组里面的一些字符不是元字符。(恣意次)

  4. {n} 涌现n次

  5. {n,m}涌现n到m次

  6. {n,}最少涌现n次

分组

1.()

//婚配一个字母加一个数字的前两个组合
var reg1=/[a-z]\d{2}/g; 
var reg2=/([a-z]\d){2}/g; //增添()
var string="a1c2d3adbb";
string.replace(reg1,"A"); //效果为"a1c2d3adbb",没有转变,由于婚配的是字母加上涌现2次的数字
string.replace(reg2,"A"); //效果为"Ad3adbb""

2.或|

var reg=/h(o|i)t/g; 
var string="hothithat";
string.replace(reg,"A"); //效果为AAhat

3.反向援用
比方日期花样的转换,由2016-08-16转换为08/16/2016

var reg=/(\d{4})-(\d{2})-(\d{2})/g; 
var string="2016-08-16";
string.replace(reg,"$2/$3/$1"); //效果为08/16/2016

个中$1示意第一组括号婚配的文本,其他相似

4.疏忽分组
在分组内加上?:

var reg=/(\d{4})-(?:\d{2})-(\d{2})/g; 
var string="2016-08-16";
string.replace(reg,"$2/$3/$1"); //效果为16/$3/2016,月份已被疏忽,没法经由过程$加数字举行接见

前瞻

文本尾部方向,为
正向前瞻: exp(?=assert)
负向前瞻: exp(?!assert)
前瞻:婚配到划定规矩的时刻,向前搜检是不是相符断言,javaScript不支持后顾。

var reg=/\w(?=\d)/g; //找到字母后,推断背面是不是是有数字,有的话才相符,替代掉这个字母,然则数字不会替代
var string="h2othi2";
string.replace(reg,"A"); //效果为A2othA2

三. 婚配形式

贪欲形式

极能够多地婚配

var reg=/\d{3,6}/g;
var string="123456789";
string.replace(reg,"A"); //效果为"A789",尽量多的婚配

非贪欲形式

让正则表达式尽量少的婚配,一旦婚配胜利就不再继承尝试。体式格局是在量词后加上

var reg=/\d{3,6}?/g;
var string="123456789";
string.replace(reg,"A"); //效果为"AAA",尽量多的婚配

四. RegExp对象

建立要领

有两种要领能够建立RegExp对象
a.显式组织函数:

var reg=new RegExp("pattern"[,"flag"]);

b.隐式组织函数:

var reg=/pattern/[flags];

个中,flags能够是一些标志字符的组合

g 为全局标志,将对一切婚配的部份起作用,假如不设置,仅搜刮和替代最早婚配的内容
i为 疏忽大小写的标志,假如设置,疏忽大小写
m 为多行标志,假如设置,“^”还能够与被搜刮字符串的 n 或 r 以后的位置举行婚配

比方:

/ab+c/i;
new RegExp("ab+c","i");

RegExp对象的属性

  • global:布尔值

  • ignoreCase:布尔值

  • lastIndex:整数,示意最先搜刮下一个婚配项的字符位置

  • multiLine:布尔值

  • source:正则表达式的字符串示意

RegExp对象的要领

exec

rgExp.exec(str)

返回值:假如没有找到婚配返回null,假如找到则返回一个数组
返回的数组有三个属性,分别是input、index和lastIndex

    input包含了查找的字符串,
    index属性包含了全部被查找字符串中被婚配的子字符串的位置,
    lastIndex属性中包含了末了一次婚配中末了一个字符的下一个位置

test

rgexp.test(str)

返回值:假如存在一个形式,返回true

match

stringObj.match(rgExp)

返回值:假如没有找到婚配返回null,假如找到则返回一个数组
返回的数组有三个属性,分别是input、index和lastIndex,input包含了查找的字符串,index属性包含了全部被查找字符串中被婚配的子字符串的位置,lastIndex属性中包含了末了一次婚配中末了一个字符的下一个位置

search

stringObj.search(rgExp);

返回值:假如存在,则返回 一个整数值,指明这个婚配间隔字符串最先的偏移位置。
没有找到则返回-1

replace

replace(rgExp,replaceText);

split

split([separator[,limit]])

separator 支解标识符参数,能够是多个字符或一个正则表达式
limit 限定返回元素的个数

五. 参考资料

  1. 《JavaScript高等程序设计》

  2. 《JavaScript正则表达式》课程, Samaritan89

    原文作者:hopeCoder
    原文地址: https://segmentfault.com/a/1190000006546392
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞