正则表达式学习笔记
2016-03-12 14:54
405 查看
概述
正则表达式是事先声明一组规则,用于匹配字符串中的字符。基本语法
元字符
在正则表达式的模式中,有一些字符是有特殊含义的,被称为元字符。元字符都是针对单个字符匹配的。
\w匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于
[a-zA-Z0-9_]
\W不匹配大小写英文字符及数字 0 到 9 之间的任意一个,相当于
[^a-zA-Z0-9_]
\s匹配任何空白字符,相当于
[ \f\n\r\t\v]
\S匹配任何非空白字符,相当于
[^\s]
\d匹配任何 0 到 9 之间的单个数字,相当于
[0-9]
\D不匹配任何 0 到 9 之间的单个数字,相当于
[^0-9]
[\u4e00-\u9fa5]匹配任意单个汉字(这里用的是 Unicode 编码表示汉字的 )
界定符
比较通用的正则表达式界定符是双斜杠/regex/
原子的概念
正则表达式中的原子分为可见原子和不可见原子。[\f\n\r\t\v]属于不可见原子,其他表示可见原子
量词
\*匹配 0 到多个元字符,相当于
{0,}
?匹配 0 到 1 个元字符,相当于
{0,1}
{n}匹配 n 个元字符
{n,}匹配至少 n 个元字符
{n,m}匹配 n 到 m 个元字符
\+匹配至少 1 个元字符,相当于
{1,}
边界
\b匹配单词边界
^字符串必须以指定的字符开始
$字符串必须以指定的字符结束
捕获分组
正则表达式中,使用()将若干单位(可以是字符,正则表达式)组织在一起,成为一个独立单元。
正则表达式中,分组分为捕获分组和非捕获分组。
/(pattern)/flags
模式修正
贪婪/懒惰,忽略大小写,忽略空白字符使用场景
表单验证, 模板引擎/****************************************************************************************************/
JS 中的正则表达式
概述
在 JS 中,正则表达式是个RegExp对象,具有
exec,
test方法。而在
String对象中,也存在
match,
replace,
search,
split操作正则表达式的方法。
声明
JS 中的正则表达式有两种声明方式(对象字面量 / 构造函数),都会生产一个RegExp对象的实例。
/pattern/flags new RegExp(pattern[, flags])
RegExp 对象
实例var pattern = /quick\s(brown).+?(jumps)/ig; var pattern = new RegExp("quick\\s(brown).+?(jumps)","ig");
实例之后的
pattern对象就具有以下属性:
lastIndex:下次开始匹配的字符串位置,若是无设置全局模式,会始终为 0
ignoreCase:是否设置忽略大小写模式
global:是否设置了全局匹配模式
source:正则表达式的文本内容
注意使用构造函数声明正则表达式的时候,需合理使用转义符。
方法
RegExp.exec检索字符串中指定的值。返回一个结果数组。该方法总是返回单词匹配的结果。
在正则表达式设置了
g模式的情况下,会同时更新
RegExp对象的
lastIndex属性。
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog'); // console.log(result) // ["Quick Brown Fox Jumps", "Brown", "Jumps"] var pattern = /ab*/g; var str = 'abbcdefabh'; var matchArray; while ((matchArray = pattern.exec(str)) !== null) { var msg = 'Found ' + matchArray[0] + '. '; msg += 'Next match starts at ' + pattern.lastIndex; //console.log(msg); // Found abb. Next match starts at 3 // Found ab. Next match starts at 9 }
使用循环的时候,不要把正则表达式的操作放置在循环体中(这样每次都会重新生成
RegExp对象),同时必须设置全局模式,可能会造成死循环。
RegExp.test执行检索字符串中指定值的操作。返回
true或
false。
var pattern = /^\d{4}-\d{2}-\d{2}$/; var result = re.test('2010-12-20'); console.log(result) // true
在正则表达式设置了
g模式的情况下,跟
RegExp.exec一样,会同时更新
RegExp对象的
lastIndex属性。
var pattern = /^\d{4}-\d{2}-\d{2}$/g; pattern.test('2010-12-20'); // true pattern.test('2010-12-20'); // false
RegExp.test在匹配成功之后,各个捕获分组的文本会保存下来,用
RegExp.$1,
RegExp.$2··· 就可以获得,不过,保存整个表达式匹配文本的
RegExp.$0并不存在。
String 对象
方法String.match返回一个结果数组或
null。
在正则表达式设置了
g模式的情况下,
match默认返回所有可能的匹配结果。
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; var re = /[A-E]/gi; var matches = str.match(re); console.log(matches); // ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
如果正则表达式没有设置
g模式,那么
match方法返回的结果与
RegExp.exec()一致。
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; var re = /[A-E]/i; var matches_1 = str.match(re); var matches_2 = re.exec(str) console.log(matches_1, matches_2) //[ 'A', index: 0, input: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ]
该返回结果包含匹配的字符串,还有一个额外的
index属性,表示匹配字符串的位置,
input属性即是所传入的字符串。
String.search返回第一次匹配的位置或
-1
该方法用来寻找某个正则表达式在字符串中第一次匹配成功的位置,失败的时候返回
-1。
这个方法只能找到“第一次”,即使设置了
g模式,结果也不会有任何变化,所以如果需要使用一个正则表达式多次验证字符串,调用该方法判断结果是否为 0,是更好的办法。
"1234".search(/^\d+$/g) == 0 // true "5678".search(/^\d+$/g) == 0 // true var pattern = /^\d+$/g; pattern.test("1234"); // true pattern.test("5678"); // false
String.split使用一个正则表达式来切割字符串。返回数组
正则表达式是否设置了
g模式对结果没有影响。
var matchArray = "a b c".split(/\s+/); console.log(matchArray); // ["a", "b", "c"]
也可以设置第二个参数
limit,指定返回数组的数目。在 JS 中,该参数取值的结果如下
取值 | 结果 |
---|---|
limit < 0 || limit > n | 等同于未指定 |
0<=limit<=n | 返回一个包含 n 元素的数组 |
var matchArray = "a b c".split(/\s+/,2); console.log(matchArray); // ["a", "b"]
相关文章推荐
- C++第一次实验—2
- 文章学习和解读
- “万能makefile”写法详解,一步一步写一个实用的Makefile
- Android蓝牙通信
- js中object、字符串与正则表达式的方法
- HDU 3836 - Equivalent Sets【强连通分量 基础题】
- 省市区与分类多级联动的插件
- 解决mysql保存中文数据乱码
- 自己挑出的几个windows xp、7、8.0、10的纯净版官方镜像下载地址
- CentOS 设置redis为服务
- 在TextBox中敲击回车执行ASP.NET后台事件
- 【BZOJ 3295】动态逆序对 - 分块+树状数组
- C#中的结构体与类的区别
- C# 结构体 struct
- 我的第一个Python游戏
- Sql语言的分类
- Apache Commons Configuration读取xml配置
- Understanding the code inside Tornado, the asynchronous web server
- quick-cocos2d-x图片资源加密(续)
- python练习