正则表达式初概念——通配符
在查找硬盘文件时,我们可能会用到通配符?
和 *
;?
通配符可以匹配0个或1个字符,而*
通配符则可以匹配0个或多个字符;例如:data(\w)?\.dat
能匹配到文件
data.dat
data1.dat
data2.dat
datax.dat
dataN.dat //0个到1个字符长度
而data.*\.dat
则能匹配到
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat //任意字符长度
那么正则表达式又是什么呢?
简单示例:^ [0-9a-z=-#$%]{3,15}abc$
其中^
为输入字符串的开始位置;
而[0-9f-z&*^$#]
中可以输入你想要匹配的符号;
{3,15}
则代表了你想要匹配的长度(这里代表了长度在3到15 的区间内);
最后abc$
代表了以abc为结尾的字符串;
RegExp 对象
正则表达式是描述字符模式的对象;
正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。
语法部分:
var patt = new RegExp(pattern,modifiers);
或者更简单的方式:
var patt = /pattern/modifiers;
- pattern(模式)描述了表达式的模式
- modifiers(修饰符)用于指定全局匹配、区分大小写匹配和多行匹配
注意:当使用构造函数创建正则对象时,需要常规的字符转义规则,即需要在正则语句前加上转义符\,比如:
var re = new RegExp("\\w+");
var re = /\w+/; //这两条语句是等价的
修饰符
基本语法
i 执行对大小写不敏感的匹配
new RegExp("regexp","i")
或者更加简洁的方式
/regexp/i
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
new RegExp("regexp","g")
更简单方式
/regexp/g
示例:
var str="Is this all there is?";
var patt1=/is/g;
document.write(str.match(patt1));
输出: is,is
m执行多行匹配
new RegExp("regexp","m")
更简单方式
/regexp/m
方括号
方括号用于查找某个范围的字符
基础语法
new RegExp("[a-h]")
或者更简单方式:
/[a-h]/ //可以匹配到a-h之间的任意的字符
new RegExp("[^a-h]")
或者更简单方式:
/[^a-h]/ //可以匹配到任何不在a-h之间的字符
元字符
.元字符
用于查找单个字符,除了换行和行结束符。
基础语法
.new RegExp("regexp.")
或者更加简单的方式:
/regexp./
示例
var str="That's hot!";
var patt1=/T.a/g; //.元字符匹配单个字符
document.write(str.match(patt1));
输出结果:Tha
\w 元字符
用于查找单词字符,其中单词字符包括:a-z、A-Z、0-9,以及下划线,包含_(下划线)等字符。
\W
用于查找非单词字符.。
\d
用于查找数字字符
\D
用于查找非数字字符
\s
用于查找空白字符
\S
用于查找非空白字符
\b
用于匹配单词边界(通常用于查找位于单词开头或结尾的匹配)
\B
用于匹配非单词边界
\0
用于查找null字符
\n
用于查找换行符(获取到的是该换行的位置)
\f
用于查找换页符
\r
用于查找回车符
\t
用于查找制表符
\v
用于查找垂直制表符
\xxx
用于查找以八进制数xxx规定的字符
\xdd
用于查找以十六进制数dd规定的字符
\uxxxx
用于查找以十六进制数xxxx规定的Unicode字符
基础语法
new RegExp("\w")
或者更加简单的方式
/\w/
示例
var str="Visit Runooob";
var patt1=/\bRun/g; //只有当该字符串位于语句单词的开头部分时,才能成功匹配
document.write(str.match(patt1));
输出Run
var str="Visit Runooob";
var patt1=/\Bun/g; //只有当该字符串不位于语句单词的开头部分时,才能成功匹配
document.write(str.match(patt1));
输出un
量词
n+
可以匹配任何包含至少一个n的字符串,例如ca+
可以匹配‘candy’
中的ca
,也可以匹配‘caaaaandy’
中的caaaaa
(即至少包含一个a)n*
可以匹配任何包含零个或多个n的字符串,例如bo*
可以匹配"A ghost booooed"
中的"boooo"
,"A bird warbled"
中的"b"
(即被匹配的单词可以为0个)n?
可以匹配任何包括零个或一个n的字符串n$
匹配任何结尾为 n 的字符串^n
匹配任何开头为 n 的字符串?=n
匹配任何其后紧接指定字符串 n 的字符串?!n
匹配任何其后没有紧接指定字符串 n 的字符串
RegExp对象方法
compile()
编译正则表达式
语法:RegExpObject.compile(regexp,modifier)
exec()
检索字符串中指定的值,返回找到的值,并确定其位置
语法:RegExpObject.exec(string)
test()
检索字符串中指定的值。返回true
或false
语法:RegExpObject.test(string)
toString()
返回正则表达式的字符串
语法:RegExpObject.toString()
(没有参数)