Javascript – 正则表达式
目录
- 1. 正则表达式
- 1.1 创建
- 1.2 RegExp 对象属性
- 1.3 RegExp 对象方法
- 1.4 RegExp 分组
- 2. 元字符和正则表达式规则
1正则表达式
其中,元字符(metacharacters)也是由普通字符组成,具有特殊意义。比如 {3}
代表了将前面的字符或分组重复匹配三次,$
代表了匹配一行的结束位置。(更多的元字符请看下面的 表格。)
正则表达式常被用来执行复杂的 “搜索-替换” 、验证字符串格式是否正确。
当今的大多数程序设计语言都包含正则表达式。甚至包括脚本语言、编辑器、应用程序、数据库和一些命令行的工具也包含正则表达式工具。下面介绍 Javascript 中实现正则表达式的 Regex
对象。
1.1 创建
Regex
是 Javascript 的内置对象,描述一个字符串的匹配模式,为字符串操作提供了强大的匹配和替换方法。
和数组、对象差不多,Regex
对象的创建也有常量、构造函数、普通函数三种创建方式:
直接量语法
构造函数
普通函数
其中的 pattern
是正则表达式的匹配模式,由字符和元字符(表格)构成,attributes
是正则表达式的标记,可以是 "i"
、"g"
、"m"
三个字母或三个字符的任意组合:
"i"
:大小写不敏感"g"
:全局匹配(查找所有匹配而非在找到第一个匹配后停止)"m"
:多行匹配
在使用函数创建正则表达式的时候,如果 pattern 不是一个字符串,而是一个正则表达式,则忽略第二个参数:
1.2 对象属性
regexOjbect.source
属性是一个只读的字符串,包含了描述这个正则表达式的文本;regexOjbect.global
属性是一个只读的布尔值,表明这个正则表达式是否为具有标识"g"
;regexOjbect.ignoreCase
属性是一个只读的布尔值,表明这个正则表达式是否为具有标识"i"
;regexOjbect.multiline
属性是一个只读的布尔值,表明这个正则表达式是否为具有标识"m"
;regexOjbect.lastIndex
属性是一个数值,如果正则表达式有 “g” 标识,这个属性表明下一次检索的起始位置。
可以看到,当正则表达式匹配结束或失败时,regexOjbect.lastIndex
被重置。
1.3 对象方法
test
Regex.test
方法测试正则表达式指定的模式是否出现在字符串中,返回 true
或 false
。
compile
Regex.compile
方法可以在脚本执行过程中编译正则表达式,也可以改变和重新编译正则表达式。形式如下:
regexp
是一个正则表达式,用于替换 RegExpObject
。
modifier
是正则表达式的匹配属性( "i"
/ "g"
/ "i"
)。
如果缺省参数,RegExpObject
被重置为一个空的正则表达式 //
。
如果 regexp
是正则表达式本身,结果就是重新编译并重置它的属性,比如 lastIndex
。
exec
Regex.exec
方法用于检索字符串中正则表达式的匹配。形式如下:
Regex.exec
方法返回一个数组:
- 数组的元素,就是匹配的结果;
- 数组的属性
index
表示匹配发生的位置,input
表示原始字符串; - 未找到匹配返回
null
,而不是空数组[ ]
;
执行 exec
后:
- 如果匹配成功,正则表达式的属性
lastIndex
设为匹配文本后面的位置; - 如果匹配失败,正则表达式的属性
lastIndex
设为 0 。
非全局匹配的情况下,exec
的返回结果和 String.match
相同。
全局匹配的情况下,可以通过反复调用 exec
方法来遍历字符串中的所有匹配文本。
用 for
来遍历:
1.4 分组
正则表达式中,使用括号 ( )
进行分组。
分组的正则表达式有两个作用:一是可以让重复的模式作用于整个组而不是单一字符,另一个是可以用特殊转义序列对其进行引用。
其中使用 \n
引用前面第 n
个 捕获子表达式 的捕获结果。
分组的捕获结果,还可以用 RegExp 的静态属性 $1...$9
引用。在 string.replace
方法中:
在 string.replace
的 replacement
参数中 "$1" ... "$9"
拥有特殊意义,引用模式匹配过程中 捕获子表达式 捕获的结果。
也可以在 replacement
外使用 RegExp.$1 ... RegExp.$9
访问对应分组捕获的结果。
2元字符和正则表达式规则
Character | Description |
---|---|
\ |
\ 标志着下一个字符是一个特殊的字符。元字符拥有特殊的意义,如果想使用这些字符,需用 \ 转义:
|
^ |
^ 匹配字符串的开始位置。如果进行多行(Multiline)匹配,^ 也会匹配 \n 、\r 后面的位置。
|
$ |
$ 匹配字符串的结束位置。如果进行多行(Multiline)匹配,$ 也会匹配 \n 、\r 前面的位置。
|
* |
* 匹配前面的字符或者分组 0 次或多次。如 zo* 匹配 “zo” 和 “zoo”,甚至是 “z”。
|
+ |
+ 匹配前面的字符或者分组 1 次或多次。如 zo+ 匹配 “zo” 和 “zoo”,但不匹配 “z”。
|
? |
? 匹配前面的字符或者分组 1 次或多次。如 do(es)? 匹配 “do” 和 “does” 。
|
{n} |
{n} 匹配前面的字符或者分组 n 次。其中 n 是非负整数。如 o{2} 匹配 "food" 的 2 个 "o" ,不匹配 "do" 中的 1 个 "o" 。
|
{n,} |
{n,} 匹配前面的字符或者分组至少 n 次。其中 n 是非负整数。如 o{1} 匹配 "yahoo" 的 2 个 "o" ,也匹配 "yahooooooooo" 中的所有 "o" 。
|
{n,m} |
{n,m} 匹配前面的字符或者分组至少 n 次、至多 m 次。其中 n 和 m 都是非负整数。如 o{1,3} 匹配 "yahoo" 的前 3 个 "o" ,也匹配 "yahooooooooo" 中的前 3 个 "o" 。
注意:数字和逗号之间不能有空格。 |
? |
其实
? 有两个用途。
第一个用途上面提到了,用来匹配前面字符或分组 0 次或 1 次。 第二个用途,用在其他量词(比如 |
. |
. 匹配除了 "\n" 外的任何字符。
想要匹配 |
(pattern) |
(pattern) 匹配模式 pattern 并捕获结果。
|
(?:pattern) |
(?:pattern) 匹配模式 pattern 并但不捕获结果。
加 |
(?=pattern) |
(?=pattern) 零宽正向预测先行断言。断言此位置的后面匹配 pattern ,不捕获结果(零宽)。
先行断言 |
(?!pattern) |
(?!pattern) 零宽负向预测先行断言,断言此位置的后面不匹配 pattern ,不捕获结果(零宽)。
先行断言 |
x|y |
x|y 匹配 x 或 匹配 y 。
比如 |
[xyz] |
[xyz] 代表一个字符集(字符集中的元字符不需要转义)。匹配任何出现在中括号 [ ] 中的字母 。
比如 可以使用
|
[^xyz] |
[^xyz] 代表一个排除字符集,不匹配任何出现在中括号 [ ] 中的字母 。
比如 |
\b |
\b 匹配单词边界。
比如
|
\B |
\B 匹配非单词边界的位置。
比如
|
\cx |
\cx 匹配由 x 字符表示的控制字符。
如 /td> |
\d |
\d 匹配一个数字,相当于 [0-9] 。
|
\D |
\D 匹配一个非数字的字符,相当于 [^0-9] 。
|
\f |
\f 匹配一个换页符,相当于 \x0c 或 \cL 。
|
\n |
\n 匹配一个换行符,相当于 \x0a 或 \cJ 。
|
\r |
\r 匹配一个回车符,相当于 \x0d 或 \cM 。
|
\s |
\s 匹配空白字符,包括空格 " " 、制表符 "\t" 、翻页符 "\f" 、换行符 "\n" 、垂直制表符 "\t" 。
相当于 |
\S |
\S 匹配非空白字符,相当于 [\f\n\r\t\v]
|
\t |
\t 匹配制表符,相当于 \x09 、\cI 。
|
\v |
\v 匹配垂直制表符,相当于 \x0b 、\cK 。
|
\w |
\w 匹配任何单词字符,包括下划线,相当于 [A-Za-z0-9_] 。
|
\W |
\w 匹配任何非单词字符,相当于 [^A-Za-z0-9_] 。
|
\xn |
\xn 匹配 Latin-1 字符,其中的 n 为 16 位的数字。 。
所有的 ASCII 字符都可以用 |
\num |
\num 引用前面第 num 个 捕获子表达式 捕获到的字符串。num 是一个正整数。
如 (.)\1 同一个字符匹配两次。 |
\n |
\n n 代表一个数字。
|
\nm |
\nm n 、 m 代表一个数字。
|
\nml |
\nmlnm 当 n 在 0 - 3 间,m 、l 在 0 - 7 间, 匹配八进制转义码 nml 。
|
\un |
\un 匹配编码为 n 的 Unicode 字符 。
|
转载于:https://www.cnblogs.com/kangzhibao/p/4085140.html
Javascript – 正则表达式相关推荐
- JavaScript正则表达式快速判断技巧
原文:JavaScript正则表达式快速判断技巧 这里是JS的正则的一点心得,并不是最完整的规则汇总,更侧重实际运用中的快速判断,初学者接触正则之后往往会被一堆星号括号给弄晕,有了一些速判技巧就能从整 ...
- javascript 正则表达式详解
正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个 ...
- 经典JavaScript正则表达式实战
来源:http://www.cainiao8.com/web/js_note/js_regular_expression_blueidea.html 目录 1. 正则表达式实战...1 2. 匹 ...
- 温故知新 javascript 正则表达式
温故知新 javascript 正则表达式 转载:http://www.cnblogs.com/libinqq/archive/2008/07/31/1257699.html 很长时间没看 正则表达式 ...
- javascript正则表达式小结
总结了一下javascript正则表达式的内容.表格形式,一目了然.辅以Example图形解释. 一.元字符 二.反义字符 三.转义字符 四.重复匹配 五.分组/捕获 六.贪婪与惰性 七.修饰符 ex ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- 好程序员web前端分享使用JavaScript正则表达式如何去掉双引号
为什么80%的码农都做不了架构师?>>> 好程序员web前端分享使用JavaScript正则表达式如何去掉双引号,最近接了一个项目,项目需求需要用js正则表达式过滤掉页面文本域 ...
- JavaScript 正则表达式
JavaScript 正则表达式 版权声明:未经授权,严禁转载! 正则表达式 什么是正则表达式 正则表达式是用来描述一种特定格式的字符规则的表达式. 正则表达式常用语在一段文本中搜索,匹配或者替换特 ...
- js php 正则差别,JavaScript正则表达式的浏览器的差异
JavaScript中的正则表达式在不同的浏览器中得到的结果可能会有差异,下面把正则表达式在五大主流浏览器(IE.Firefox.Chrome.Safari.Opera,以当前版本为准)之间的差异整理 ...
- 玩转JavaScript正则表达式
Why Regular Expression 我们先来看看,我们干哈要学正则表达式这玩意儿: 复杂的字符串搜寻.替换工作,无法用简单的方式(类似借助标准库函数)达成. 能够帮助你进行各种字符串验证. ...
最新文章
- js调用linux命令,xshell调用js脚本开发
- android主题编辑器,使用 Theme Editor 设计应用主题背景
- 打印的图片不清晰_如何调节图片kb,但又不改变图片的清晰度?
- Spring使用注解@Transactional事物手动回滚
- Linux查看某个进程的启动时间
- Java 会是首选的最佳编程语言吗?
- typora 语法教程
- 每周荐书:JVM、Nginx、小程序(评论送书)
- java 男女 相邻交换 队形_(Java实现) 洛谷 P1091合唱队形
- Unity实现鼠标拾取电脑屏幕指定区域像素点颜色
- javaWeb毕业设计项目完整源码附带论文合集免费下载
- java设置环境变量jre_JRE环境变量配置图解
- 手机怎么设置腾达路由器后显示远端服务器,怎么用手机设置腾达路由器
- c语言最长良序字符串,C语言高效编程的4个方法
- 自动识别查找特定的串口号 比如设备管理器中Modem属性里的串口 按这个方法可以获取设备管理器任意信息。C++
- Spring boot 项目Kafka Error connecting to node xxx:xxx Kafka项目启动异常 Failed to construct kafka consumer
- nhibernate mysql配置_(转)NHibernate各种数据库配置写法
- WG225模块(SDIO WIFI)调试记录
- excel中替换功能的新颖用法
- 北师大 马原 自测题复习
热门文章
- c语言中Gretchen函数的功能,听过很多的歌的音乐达人给我推荐一下
- 接口隔离原则_设计模式的三大分类及六大原则
- hadoop 卡主_HDFS DisTCP执行卡住了,怎么办?
- python高手之路第三版_《Python高手之路(第3版)》——1.3 版本编号-阿里云开发者社区...
- linux系统io查看计算,Linux下查看进程IO工具iopp
- 什么是四路串口服务器?
- [渝粤教育] 南京信息职业技术学院 电工电子技术基础 参考 资料
- 【渝粤教育】广东开放大学 文化产业项目案例分析 形成性考核 (51)
- 【渝粤题库】广东开放大学 文化投资与贸易 形成性考核
- windows无法确定此计算机是否包含,服务器用U盘虚拟光驱装系统,有做RAID5,加载RAID驱动成功后,安装到最后会报“windows无法确定此计算机是否包含有效系统卷”错误...