JS正则表达式笔记
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则 | 描述 | 正则 | 描述 |
\f | 匹配换页符 | \t | 匹配制表符 |
\n | 匹配换行符 | \v | 匹配垂直制表符 |
\r | 匹配回车 | \s | 匹配单个空格,等同于[\f\n\r\t\v] ; |
\S | 表示非空格字符 | \d | 在正则中表示数字 |
\w | 表示单词字符,等同于字符集合[a-zA-Z0-9_] | \ | 创建正则对象时,要转义 |
+ | 表示出现一到多次 | ^ | 表示后边出现的数字必须在开头 |
$ | 表示前面出现的数字必须出现在结尾 |
g是模式修正符,表示在整个字符串里多次查找
match方法来找到和reg正则相匹配的内容
"ab23839cd".match(/\d+/)
空白\s(包括空格回车制表符等)
\f
匹配换页符,\n
匹配换行符,\r
匹配回车,\t
匹配制表符,\v
匹配垂直制表符。\s
匹配单个空格,等同于[\f\n\r\t\v]
。例如:
例1:
var reg = /\s.+/;
var str='This is a test String.';
alert(reg.exec(str));
返回“is a test String.”
,正则的意思是匹配第一个空格以及其后的所有非换行字符。
同样,\S
表示非空格字符。
例2:
var reg = /\S+/;
var str='This is a test String.';
alert(reg.exec(str));
匹配结果为This
,当遇到第一个空格之后,正则就停止匹配了。
在正则中最常用到的一个是:
例3:var reg=/^\s*$/;
//匹配任意空或空白字符,如果你什么也没输入,或输入的只有空格、回车、换行等字符,则匹配成功。这样就可以验证用户是否正确输入内容了。
这个用来验证输入框里是否写了有效效字符,用法如下:
var reg=/^\s*$/;
if(reg.test(value)){
alert('请输入有效值');
return false;
}
单字符\w
\w(小写w)
表示单词字符,等同于字符集合[a-zA-Z0-9_]
。例如:
var reg = /\w+/;
var str='wanjinfen';
alert(reg.exec(str));
返回完整的wanjinfen字符串,因为所有字符都是单词字符。
var reg = /\w+/;
var str='.className';
alert(reg.exec(str));
结果显示匹配了字符串中的className
,只有第一个“.”
唯一的非单词字符没有匹配。
var reg = /\w+/;
var str='正则教程';
alert(reg.exec(str));
试图用单词字符去匹配中文自然行不通了,返回 null
。
\W(大写W)
表示非单词字符,等效于[^a-zA-Z0-9_]
var reg = /\W+/;
var str='正则教程';
alert(reg.exec(str));
返回完整的字符串,因为,中文算作是非单词字符。
分组和分组的引用
形式如下:/(子正则表达式)\1/ 依旧用例子来说明:
1.例子
var reg = /\w/;
var str='zhufengpeixun';
alert(reg.exec(str));
//返回z
2.例子
var reg = /(\w)(\w)/;
var str='zhufengpeixun';
alert(reg.exec(str));
返回zh,z,h
,zh
是整个正则匹配的内容,z
是第一个括号里的子正则表达式匹配的内容,h是第二个括号匹配的内容
3.例子
var reg = /(\w)\1/;
var str='zhufengpeixun';
alert(reg.exec(str));
则会返回null
。这里的“\1”
就叫做反向引用,它表示的是第一个括号内的子正则表达式匹配的内容。在上面的例子中,第一个括号里的(\w)
匹配了z,因此“\1”
就同样表示z了,在余下的字符串里自然找不到z了。与第二个例子对比就可以发现,“\1”
是等同于“第1个括号匹配的内容”
,而不是“第一个括号的内容”
。
var reg = /(\w)\1/;
var str='bbs.zhufengpeixun.cn';
alert(reg.exec(str));
这个正则则会匹配到bb,b
。同样,前面有几个子正则表达式我们就可以使用几个反向引用。例如:
var reg = /(\w)(\w)\2\1/;
var str='woow';
alert(reg.exec(str));
会匹配成功,因为第一个括号匹配到w,第二个括号匹配到o
,而\2\1
则表示ow
,恰好匹配了字符串的最后两个字符。
括号()
,表示子表达式,也叫分组
前面我们曾经讨论过一次括号的问题,见下面这个例子:
var reg = /^(b|c).+/;
var str='bbs.blueidea.com';
alert(reg.exec(str));
这个正则是为了实现只匹配以b或者c开头的字符串,一直匹配到换行字符,但是。上面我们已经看到了,可以使用“\1”来反向引用这个括号里的子正则表达式所匹配的内容。而且exec方法也会将这个字正则表达式的匹配结果保存到返回的结果中。
未完……
最新文章
- nandflash驱动程序编写
- Unity Game窗口中还原Scene窗口摄像机操作 强化版
- PICT安装与使用
- postgresql+slony-i安装配置主从
- 透明度兼容性(ie8以上)
- flot图插件使用
- ORA-19502: write error on file ";/u01/app/oracle/oradata/standby/system01.dbf";, blockno 40321 (blocksize=8192)【error收集】
- Surface,送我都不要
- Hibernate 配置详解(11)
- Raft详解分析
- ural1682 Crazy Professor
- mvvm,如何解析一个指令表达式?
- 如何获得MIUI10系统的root超级权限
- Python实现百度贴吧自动顶贴机
- Confluence 6 升级你的许可证
- Tomcat线程池的深入理解
- CSS vertical-align属性详解
- spring cloud 学习(二)关于 Eureka 的学习笔记
- day85 ModuleForm Form组件
- Dropout caffe源码
热门文章
- ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件
- apache ab 测试 apr_socket_connect(): 由于目标机器积极拒绝 无法连接
- 谣言粉碎机 - 极短时间内发送两个Odata request,前一个会自动被cancel掉?
- Multi-Thread 1: how to use synchronized
- BZOJ2976:[POI2002]出圈游戏(exCRT)
- 【[SDOi2012]Longge的问题】
- [19/03/12-星期二] 数组_遍历(for-each)&;复制&;java.util.Arrays类
- 【luogu P1111 公路修建】 题解
- Java8函数之旅 (七) - 函数式备忘录模式优化递归
- lucene&;solr学习——solr学习(二) Solr管理索引库