关于JS中的正则表达式(1)

正则表达式是什么?正则表达式

在编写处理字符串的程序或网页时,常常会有查找符合某些复杂规则的字符串的须要。正则表达式就是用于描述这些规则的工具,也就是对文字进行模糊匹配的语言。能够完成如下功能:windows

(1)测试字符串的某个模式;(2)替换文本;(3)根据匹配模式才可以字符串中提取子字符串。ide

元字符“?”与“()”函数

?表示紧靠前的选项无关紧要,例:abc能匹配ab和abc工具

()表示子匹配,例:a(bc)?能匹配a和abc。测试

11111-1234匹配模式“\d{5}(-\d{4})?",连续匹配两个相同数字用(\d)\1,连续匹配五个相同数字(\d)\1{4};1221匹配模式(\d)(\d)\2\1。spa

\d表示匹配任意一个数字字符,{5}表示紧靠其前的元素项重复五次code

字符转义对象

若是你想查找元字符自己的话,好比你查找.,或者*,就出现了问题:你没办法指定它们,由于它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。所以,你应该使用\.\*。固然,要查找\自己,你也得用\\blog

例如:unibetter\.com匹配unibetter.comC:\\Windows匹配C:\Windows

RegExp显示函数:newRegExp=("pattern"[,"flags"]);

RegExp隐示函数:/pattern/[flags].

"\"是转义字符,构建显示函数RegExp实例对象时,将"\"替换为"\\"。例:varre1=newRegExp=("\\d{5});等价于varre2=/\d{5}/;

元字符分类

1、限定符

{n}重复n次,例:o{2}不能与bob中o匹配,能够与food或foooood中两个或连续两个匹配。

{n,}重复n次或更屡次,最少出现n次

{n,m}重复n到m次,至少n次,至多m次

+必须出现一次或连续屡次,等效于{1,}

*出现连续屡次或零次,"zo*"与"z"和"zoo"都能匹配,等效于{0,}

?最多出现一次,等效于{0,1}

202147699.jpg

贪婪匹配与非贪婪匹配

默认状况下正则表达式使用最长匹配原则,即贪婪匹配。例:“zoom”匹配“zo?”的部分换为“r”,结果是“rom”,匹配“zo*”替换成“r”,结果是“rm”,而不是“room”。

当字符“?”紧跟其余限定符以后,匹配模式变为最短原则。例:“fooood”中,“fo+?”匹配的是“fo”,而“fo+”匹配“foooo”部分。

204710464.jpg

选择匹配符

“|”例:chapter|section1匹配的是“chapter”“section1”,(chapter|section)1匹配“chapter1”“section1”。

2、分组组合与反向引用符

分组组合

将表达式中某部份内容组合起来的符号。(pattern)将pattern部分组合成一个可统一操做的组合项和子匹配,若要匹配字面意义上的括号字符“(”和“)”,在正则表达式中要分别使用“\(”和

“\)”。

(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个总体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。IP地址中每一个数字都不能大于255,因此只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

反向引用

用于匹配分组组合捕获到的内容的标识符。\num匹配编号为num的缓冲区所保存的内容,这种方式为子匹配的反向引用,能提供表示相同匹配项的能力。例:匹配连续五个数字字符。\d{5},能够匹配12345,如果55555,须要使用(\d)\1{4}。匹配“itisthecostofofgasolinegoingupup?"中连续重复的单词部分,用/\b([a-z]+)\1\b/gi。其中\b用于匹配单词的边界。

非捕获匹配

(?:pattern)将pattern部分组合成一个可统一操做的组合项,但不把这部分当子匹配项捕获,匹配的内容不存在缓冲区内供之后使用。适用于必须进行组合但又不想让组合部分具备子匹配特色状况。

例:(?:abc)?,"industry|industries"不能改写成industry(ylies),如不须要引用或检索括号中表达式所匹配结果,写为industry(?:ylies)。

正向“预测先行”匹配

(?=pattern),被搜索的字符串中必须有pattern部分匹配的内容,但不做为匹配结果处理,也不会存在缓冲区中。例:windows(?=NT|2000)只与windows2000或windowsNT中的windows匹配,而不与windows2003中的windows匹配。该匹配结果只是windows部分。

反向“预测先行”匹配

(?!pattern),被搜索字符串中不能有pattern部分匹配的内容,功能同上。例:windows(?!NT|2000)不与windows2000或windowsNT中的windows匹配,而与windows2003中的windows匹配。

相关文章
相关标签/搜索