正则表达式详解

1.正则表达式:Regular Expression(RegExp)--按照某种规则去匹配符合条件的字符串。

2.RegExp对象的创建方式:

(1).字面量

var reg = / 规则/;

看两个示例

var reg = /\bis\b/;
‘He is a boy. This is a dog. Where is she?‘.replace(reg,‘IS‘);
-------"He IS a boy. This is a dog. Where is she?"

var reg = /\bis\b/g;     //g代表全局搜索
‘He is a boy. This is a dog. Where is she?‘.replace(reg,‘IS‘);
-------"He IS a boy. This IS a dog. Where IS she?"

(2).构造函数:var reg = new RegExp(‘规则‘);

var reg = new RegExp(‘\\bis\\b‘);       //  用到了转义字符\
‘He is a boy. This is a dog. Where is she?‘.replace(reg,‘IS‘)
------"He IS a boy. This is a dog. Where is she?"

var reg = new RegExp(‘\\bis\\b‘,‘g‘);
‘He is a boy. This is a dog. Where is she?‘.replace(reg,‘IS‘)
---------"He IS a boy. This IS a dog. Where IS she?"

3. 对RegExp规则的访问修饰符:g i m

g:全文搜索

i:忽略大小写搜索

m:多行搜索:若不指定 m,则:^ 只在字符串的最开头,$ 只在字符串的最结尾。
       若指定 m,则:^ 在字符串每一行的开头,$ 在字符串第一行的结尾。

//不加g,只会匹配一处。加了g,匹配所有。//不加i,大小写严格区分;加了i,忽略大小写。var reg = /\bis\b/g;
‘He is a boy. Is he LiMing?‘.replace(reg,‘SS‘)
-------"He SS a boy. Is he LiMing?"

var reg = /\bis\b/gi;
‘He is a boy. Is he LiMing?‘.replace(reg,‘SS‘)
-------"He SS a boy. SS he LiMing?"

var reg = /\bis\b/gim;‘He is a boy.\nIs he LiMing?\nOh MY Gold!He is Tom‘.replace(reg,‘SS‘);----"He SS a boy.----SS he LiMing?----Oh MY Gold!He SS Tom"

//m小例var reg=/^@\d/g;‘@123\[email protected]\[email protected]‘.replace(reg,‘Q‘)---"Q23[email protected][email protected]"

var reg=/^@\d/gm;‘@123\[email protected]\[email protected]‘.replace(reg,‘Q‘)---"Q23---Q56---Q78"

4. 元字符:在正则表达式中有特殊含义的非字母字符

常用元字符
代码            说明
.             匹配除换行符以外的任意字符
\w             匹配字母或数字或下划线或汉字
\s             匹配任意的空白符
\d             匹配数字
\b             匹配单词的开始或结束
^             匹配行的开始
$             匹配行的结束

常用反义元字符
代码   说明
\W       匹配任意不是字母,数字,下划线,汉字的字符
\S        匹配任意不是空白符的字符
\D      匹配任意非数字的字符
\B        匹配不是单词开头或结束的位置
[^x]       匹配除了x以外的任意字符
[^aeiou]   匹配除了aeiou这几个字母以外的任意字符

常用重复限定符
代码       说明
*         重复零次或更多次
+         重复一次或更多次
?         重复零次或一次
{n}       重复n次
{n,}        重复n次或更多次
{n,m}       重复n到m次

详情,参考一下

http://www.cnblogs.com/kissdodog/archive/2013/04/22/3036649.html,写的挺好的。

5. 贪婪模式: 正则表达式在匹配时,默认是贪婪模式,就是尽可能多的匹配

比如:

\d{3,6}:那么默认是匹配6次。如果想变成非贪婪模式,则在最后加?,即\d{3,6}?

‘12345667‘.replace(/\d{3,6}/g,‘Q‘)
-------"Q67"
‘12345667‘.replace(/\d{3,6}?/g,‘Q‘)
-------"QQ67"

6. 分组():

‘a1b2c3dafd‘.replace(/([a-z]\d){3}/g,‘Q‘)
----------"Qdafd"

反向引用 $1

2016-12-25--->11/23/2016
‘2012-02-23‘.replace(/(\d{4})-(\d{2})-(\d{2})/g,‘$2/$3/$1‘)
-----"02/23/2012"

忽略分组  ?:
(?:\d{4})-(\d{2})-(\d{2})    则第一个不算是分组内容了,从第二个开始算$1,$2

‘2012-02-23‘.replace(/(?:\d{4})-(\d{2})-(\d{2})/,‘$2/$1/$3‘)
"23/02/$3"

7.前瞻:正则表达式从文本头部向尾部开始解析,文本尾部方向,称为‘前’.前瞻就是在正则表达式匹配到规则的时候,向前介绍是否符合断言,后顾方向相反。JS不支持后顾。

正向前瞻:  exp(?=assert)   负向前瞻:  exp(?!assert)

示例

‘a24c&45sad‘.replace(/\w(?=\d)/g,‘Q‘)
-----"QQ4c&Q5sad"

‘a24c&45sad‘.replace(/\w(?!\d)/g,‘Q‘)
------"a2QQ&4QQQQ"

8.RegExp对象的属性:

lastIndex:当前表达式匹配内容的最后一个字符的下一个位置。在非全局中是没有意义的,总是返回0

source:正则表达式的文本字符串。注意点:文本内容不包括对象属性的gim。

var reg1 = /\w/
reg1.source
----------"\w"
var reg2=/\d\w/gim
reg2.source
---------"\d\w"

9. RegExp对象的test方法和exec方法

(1).test():用于测试字符串参数中是否存在匹配正则表达式模式的字符串,有返回true。不需要全局。写上反而容易出现问题。

var reg1=/\w/
var reg2=/\w/g
reg1.test(‘a‘)----永远是true
reg2.test(‘a‘)---第一遍是对的,第二遍是错的,第三遍是对的...循环.和lastIndex有关系。

(2).exec()使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。如果没有匹配的文本则返回null,否则返回一个结果数组(index声明匹配文本的第一个字符的位置。

var reg4 = /\d(\w)(\w)\d/g    //正则表达式
var ts = ‘1az2bb3cy4de5ed‘     //被匹配字符串
while(r = reg4.exec(ts)){     //第一次 r=1az2  第二次=3cy4
    console.log(reg4.lastIndex+‘\t‘+r.index+‘\t‘+r)
}

-----4    0    1az2,a,z  

10.字符串对象和正则表达式相关的方法

(1).search():不执行全局匹配,它忽略g标志,每次都从字符串的开始进行检索。返回索引的位置,如果没有返回-1

‘a1b2c3d4‘.search(‘a1‘)
----0
‘a1b2c3d4‘.search(‘d‘)
-----6

(2).match()
非全局调用--找到返回数组,没有找到返回null

var reg3=/\d(\w)\d/
var ts = ‘$1a2b3c4d5e‘;
var ret = ts.match(reg3);
console.log(ret)
----------["1a2", "a", index: 1, input: "$1a2b3c4d5e"]

全局调用:没有找到任何匹配的字串,返回null;如果找到了一个或者多个匹配字串,则返回一个数组。数组中存放的是字符串中所有的匹配字串,而且也没有index属性或input属性。

var reg4 = /\d(\w)\d/g
console.log(ts.match(reg4))
------["1a2", "3c4"]

如有不足,欢迎指正!

时间: 2024-10-11 17:12:25

正则表达式详解的相关文章

python正则表达式详解

python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的.下面,我来介绍一下python中的正则表达式是怎么使用的. 首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用

PHP正则表达式详解(一)

前言: 半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时,发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教程.于是一直想把他翻译过来. 本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版权归原作者所有,欢迎转载.但是为了尊重原作者和译者的劳动,请注明出处!谢谢! 1.什么是正则表达式 基本说来,正则表达式是一种用来描述一定数量文本的模式.Regex代表Regular Express.本文将用

grep正则表达式详解及练习

grep正则表达式详解及练习 一.在学习grep正则表达式前,先了解下linux著名的文本处理三剑客: (1)grep.egrep.fgrep 文本搜索工具. (2)sed     文本编辑工具,一种流编辑器,行编辑工具. (3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器. 以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习. 1.什么是正则表达式? 正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意

Java 正则表达式详解_正则表达式

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

Shell编程之---正则表达式详解

正则表达式详解 普通字符:只是字面的意思 元字符:超过字面意思的意义 基本正则表达式元字符及其意义 * #0个或多个在*字符之前的那个普通字符 .               #匹配任意字符 ^         #匹配行首 $         #匹配行尾 $$ #执行上一条命令 !$ #上一条命令的最后一个参数,例如是/etc/passwd,继续对该参数操作,可以为 cat !$ []        #匹配字符集合 \          #转义符 \{n\}      #匹配前面字符出现n次 \

JavaScript正则表达式详解(一)正则表达式入门

JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望对于大家学习JavaScript正则表达式有一定的帮助. 建立正则表达式对象语法 re = new RegExp(/pattern/[flags]) flags 参数说明: g (全文查找出现的所有 pattern) i (忽略大小写) m (多行查找) 普通字符 描述 \ 将下一个字符标记为一个特

JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 exec方法的返回值 exec方法返回的其实并不是匹配结果字符串,而是一个对象,简单地修改一下execReg函数,来做一个实验就可以印证这一点: function execReg(reg, str) { var result = reg.exec(str); alert(typeof result

JS正则表达式详解 转

开篇,还是得说说 ^    和    $    他们是分别用来匹配字符串的开始和结束,以下分别举例说明 "^The": 开头一定要有"The"字符串; "of despair$":    结尾一定要有"of despair" 的字符串; 那么, "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配 "notice": 匹配包含notice的字符串 你可以看

Linux 正则表达式详解

正则表达式(REGULAR):为处理大量的字符串而定义的一套规则和方法,为了处理大量字符串而生 常见命令参数 基础正则表达式 . :有且只有任意一个字符(包括空格) * :重复前面任意0或者多个字符 .*:匹配任意字符==>所有,包括空格 \ :转义字符,让有意义的字符,显示原型 \$ --> $本身 ^ :^d 以d开头的文件 $ :/$ 以/结尾的文体 ^$:表示空行 grep -vn "^$" h.txt -->不显示空行 -n 显示行号 sed -r 's#(

php中正则表达式详解

概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串.常用的语言基本上都有正则表达式,如JavaScript.java等.其实,只有了解一种语言的正则使用,其他语言的正则使用起来,就相对简单些.文本主要围绕解决下面问题展开. 有哪些常用的转义字符 什么是限定符与定位符 什么是单词定位符 特殊字符有哪些 什么是逆向引用以及怎样使用逆向引用 匹配模式 php中怎样使用正则表达式 php中哪些方面需要用到正则 怎样进行邮箱匹配,url匹配,手机匹配