正则表达式

正则表达式是由一个字符序列形成的搜索模式,可用于所有文本搜索和文本替换的操作。

1、正则表达式创建

(1)字面量形式

// var reg = /条件/匹配模式g i m
// '//'里面的内容不需要加引号 不管是数字型还是字符串型
var reg = /正则表达式/修饰符;
var reg = /hello/g

(2)构造函数创建正则表达式

// var reg = new RegExp('正则表达式','匹配模式')
var reg = new RegExp('hello','g')

(3)匹配模式m/i/g

i:ignoreCase,表示匹配时忽视大小写

m:multiline,表示多行匹配

g:global,表示全局匹配

字面量形式创建正则表达式时,模式修饰符写在一对反斜线之后

2、正则表达式实例方法

(1)exec

用于匹配字符串中符合正则表达式的字符串

语法:正则表达式.exec(str)

var str = 'hello world';
var reg = /hello/g;
var res = reg.exec(str);
console.log(res);//[ 'hello', index: 0, input: 'hello world', groups: undefined ]

返回值:a.没有匹配到,返回null                                                                                                                      b.匹配到,返回一个数组:[匹配内容,index:数组中匹配的起始位置,input:参数字符串,group:undefined]

注意:当匹配模式有'g'时,正则表达式的实例属性lastIndex会记录下一次开始的位置,在第二次执行exec时,将从lastIndex开始检索,直到为null,又重新从下标为0的位置开始检索;如果匹配模式没有'g',则每次执行exec都会从开始的位置检索。

(2)test

用于检测字符串中是否有与正则表达式匹配的字符串,有则返回true,没有返回false

var str = 'hello world';
var str1 = 'good'
var reg = /hello/g;
var res = reg.test(str);
console.log(res);//true
console.log(reg.test(str1));//false

 注意:匹配模式有/无'g'时,检索规则都与exec注意点相同 

3、正则表达式语法

(1)字符集合

[abc]  查找方括号之间的任何字符,只要包含其一都返回true

var str = 'apple'
var reg = /[abc]/;
console.log(reg.test(str)); //true

[^abc] 反义/补充字符集匹配任意不在括号内的字符,只要有一个不是abc其中之一的都返回true

var str = 'a1'
var str1 = 'abc1'
var str2 = 'a'
var str3 = 'abc'
var reg = /[^abc]/;
console.log(reg.test(str)); //true
console.log(reg.test(str1)); //true
console.log(reg.test(str2)); //false
console.log(reg.test(str3)); //false

[0-9] 查找任何0至9之间的数字 只要包含其中一个数字都返回true

(2)边界符(^,$,\b,\B)

^:匹配输入开始,定义要验证的字符串以谁开始

//必须以good开头的才满足正则表达式
var reg = /^good/;
console.log(reg.test('good123')); // true
console.log(reg.test('1good12')); // false
console.log(reg.test('g123ood')); // false
//必须满足至少以good其中一个字符开头
var reg = /^[good]/;
console.log(reg.test('123'));     // false
console.log(reg.test('oo3'));     // true
console.log(reg.test('good123')); // true
console.log(reg.test('1good12')); // false
console.log(reg.test('g123ood')); // true

$:匹配输入结束,定义要验证的字符串以谁结束

//必须满足至少以good其中一个字符结尾才满足正则表达式
var reg = /[good]$/
console.log(reg.test('3oo')); // true
console.log(reg.test('123good')); // false
console.log(reg.test('1good12')); // true
console.log(reg.test('g123ood')); // false
//必须以good结尾的才满足正则表达式
var reg = /good$/;
console.log(reg.test('3oo')); // false
console.log(reg.test('123good')); // true
console.log(reg.test('1good12')); // false
console.log(reg.test('g123ood')); // false

^&$同时使用,表示精确匹配

//要验证的字符串只能是good其中一个字符
var reg = /^[good]$/
console.log(reg.test('o')); // true
console.log(reg.test('good')); // false
console.log(reg.test('g')); // true
console.log(reg.test('gd')); // false
//精确匹配,要验证的字符串必须是good
var reg = /^good$/;
console.log(reg.test('o')); // false
console.log(reg.test('good')); // true
console.log(reg.test('g')); // false
console.log(reg.test('gd')); // false

\b:匹配一个零宽单词边界,单词边界即是单词和符号之间的边界,

\B:匹配一个零宽非单词边界 ,与\b相反

var reg1 = /\bgood\b/g;
console.log(reg1.test('I am good'));//true
console.log(reg1.test('I good am'));//false
console.log(reg1.test('good'));//true
console.log(reg1.test('good I am '));//false
console.log(reg1.test('Iamgood'));//false
console.log(reg1.test('good,I am'));//true

 (3)字符类

.:匹配除换行符\n和回车符\r外的任何单个字符

. => [^\n\r] 

var reg = /./g;
console.log(reg.exec('z1-\n'));//[ 'z', index: 0, input: 'zxl', groups: undefined ]
console.log(reg.exec('z1-\n'));//[ '1', index: 1, input: 'zxl', groups: undefined ]
console.log(reg.exec('z1-\n'));//[ '-', index: 2, input: 'zxl', groups: undefined ]
console.log(reg.exec('z1-\n'));//null

\d:匹配0-9之间的一个数字字符

\d => [0-9] 

var reg = /\d/g;
console.log(reg.exec('z1-'));//[ '1', index: 1, input: 'z1-', groups: undefined ]
console.log(reg.exec('z1-'));//null

\D:匹配除了0-9外的字符

\D => [^0-9]

var reg = /\D/g;
console.log(reg.exec('z1-'));//[ '1', index: 0, input: 'z1-', groups: undefined ]
console.log(reg.exec('z1-'));//[ '-', index: 2, input: 'z1-', groups: undefined ]
console.log(reg.exec('z1-'));//null

\w:匹配包括下划线和[a-zA-Z0-9]的任何单个字符。   \w => [a-zA-Z0-9_]

\W:匹配除下划线和[a-zA-Z0-9]的任何单个字符。 [^a-zA-Z0-9_]

\s:匹配任何Unicode空白字符,包括空格、制表符、换页符等.   \s => [\f\t\n\r]

\S:匹配除Unicode空白字符外的字符     \S => [^\f\t\n\r]

(4)数量词

字符含义
*>=0次
+>=1次
0或1次
{n}n次
{n,}>=n次
{n,m}n至m次

应用:

//* 允许出现至少0次
var reg = /^a*$/;
console.log(reg.test('a')); // true
console.log(reg.test('')); // true
//+ 允许出现至少一次
var reg = /^a+$/;
console.log(reg.test('a')); // true
console.log(reg.test('')); // false
//? 允许出现0次或1次
var reg = /^a?$/;
console.log(reg.test('a')); // true
console.log(reg.test('')); // true
console.log(reg.test('aa'));//false
//{n} 允许出现n次 n为非负整数
var reg = /^a{1}$/;
console.log(reg.test('a')); //true
console.log(reg.test('aa'));//false
//{n,} 至少出现n次 n为非负整数
var reg = /^a{1,}$/;
console.log(reg.test('')); // false
console.log(reg.test('a')); //true
console.log(reg.test('aa'));//true
//{n,m} 允许出现n到m次 n,m为非负整数
var reg = /^a{1,2}$/;
console.log(reg.test('aaa')); // false
console.log(reg.test('a')); //true
console.log(reg.test('aa'));//true

(5)重复方式

a.贪婪模式:尽可能多的匹配,最先取最大匹配数量为一组进行匹配,为默认模式

// 对字符串"12345",匹配其中的数字1到3次:\d{1,3},先匹配数字出现3次的字符串(123),然后再从剩余字符串(45)中匹配出现数字2次的情况,在到出现数字一次的情况,匹配完则返回null
var str = "12345";
var reg = /\d{1,3}/g;
console.log(reg.exec(str)); //[ '123', index: 0, input: '12345', groups: undefined ]
console.log(reg.exec(str)); // [ '45', index: 3, input: '12345', groups: undefined ]
console.log(reg.exec(str)); // null

b.非贪婪模式:于贪婪模式相反,每次取最少匹配的数量为一组进行匹配,直到匹配完不到。

//非贪婪模式使用方法:在数量词后加上?
var str = "12345";
var reg = /\d{2,3}?/g;
console.log(reg.exec(str)); //[ '12', index: 0, input: '12345678', groups: undefined ]
console.log(reg.exec(str)); // [ '34', index: 2, input: '123456789', groups: undefined ]
console.log(reg.exec(str)); // null

4、选择,分组,引用

(1)选择 '|'

"|"用于分隔选择项,匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,下一次执行exec将从上次匹配结束的地方为起始位置开始进行匹配。

var str = "helloworldhellohtml";
var reg = /hello|world|html/g;
console.log(reg.exec(str)); //[ 'hello', index: 0, input: 'helloworldhellohtml', groups: undefined ]
console.log(reg.exec(str)); // [ 'world', index: 5, input: 'helloworldhellohtml', groups: undefined ]
console.log(reg.exec(str)); // [ 'hello', index: 10, input: 'helloworldhellohtml', groups: undefined ]

(2)分组

var reg = /hellohellohello/   等效于  var reg = /(hello){3}/   圆括号包裹的内容作为一个整体成为分组。一个分组中可以有多个候选表达式,用'|'分隔开:

var reg = /I have a (pen|apple|applepen)/;
console.log(reg.test('I have a pen')); //true
console.log(reg.test('Ihave a apple')); //true
console.log(reg.test('I have a applepen')); //true

(3)引用

正则表达式里可以进行引用,称为反向引用:

var reg = /(\w{3}) is \1/
console.log(reg.test('abc is abc')); // true
console.log(reg.test('bca is bca')); // true
console.log(reg.test('abc is bca')); // false
console.log(reg.test('abc is \1')); // false
//注意:这里\1编号不能越界,不然会被当作普通的字符
var reg = /(\w{3}) is \6/;
reg.test( 'kid is kid' ); // false
reg.test( 'kid is \6' );  // true

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式自动生成器是一个智能、易用的正则表达式生成、测试以及字符串提取工具。正则表达式库让你可以直接借用正则表达式,而无需自己费脑筋。“正则表达式自动生成器”可以自动生成正则表达式,测试正则表达式,可视化显示结果,导出提取字符串,你所要做的,仅仅是几下鼠标点击! 正则表达式自动生成器主要功能: 自动生成正则表达式 编辑并测试正则表达式 多向导页,可在多个源文本上测试同一个正则表达式(标准版无此功能) 多页参考生成正则表达式(标准版无此功能) 自动检查和修改生成的正则表达式的正确性 以可视方式呈现测试结果 从文本文件中获取源文本 从HTML页面中获取源代码 一键导出匹配文本 一键导出提取字符组,并按自定义的分隔符进行分隔 保存项目以便重复测试和修改 在“设计元素”中学习并创建正则表达式 直接从正则表达式库中选择利用正则表达式 多语种 100%-200%大字体下完美显示 你可以从任何纯文本中提取有规律的文字,比如txt文件,XML文件,csv文件,HTML文件等,然后导出到剪贴板或文本文件中,你可以很方便地把它们导入到程序,数据库,excel文件等。 正则表达式自动生成器现在有三个语言版本: 英语,简体中文,繁体中文,我们会在以后加入其他语言,比如日语,德语和法语等。 正则表达式自动生成器更新内容: 1、修复一些小bug。 2、增加自定义组和限定词的正则表达式 3、增加自定义窗口背景 4、增加自定义按钮背景 5、修改软件时间为UTC时间(日志除外) 6、修改更新模块 正则表达式自动生成器截图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值