`
Sev7en_jun
  • 浏览: 1225535 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
84184fc0-d0b6-3f7f-a3f0-4202acb3caf5
Apache CXF使用s...
浏览量:111305
社区版块
存档分类
最新评论

正则表达式RegExp

    博客分类:
  • JS
阅读更多

正则表达式由来已久,查找替换功能非常强大,但模板难记复杂。 JavaScript中String对象的match()、replace()这2个方法都要使用正则表达式的模板。当模板内容与字符串不相匹配时,match()返回null,replace()返回原字符串。

正则表达式的模板对象
//标准写法
regexp = new RegExp(pattern[, flag]);
    pattern:  模板的用法是关键,也是本章的主要内容。
    flag:     "i"(ignore)、"g"(global)、"m"(multiline)的组合
    i-忽略大小写,g-反复检索,m-多行检索flag中没有g时,返回字符串,有g时返回字符串数组
var reg = new RegExp("飞雪","g");
var str = "风雨送春归飞雪迎春到,飞雪连天向天横";
var xx = str.(str.match(reg));  //xx的结果: xx[0]="飞雪"
alert(xx);                      //          xx[1]="飞雪"
//常用写法
regexp = new RegExp(/pattern /[flag]);  //去掉引号逗号改用“/”
ar reg = new RegExp(/飞雪/g);
var str = "风雨送春归飞雪迎春到,飞雪连天向天横";
var xx = str.(str.match(reg));  //xx的结果: xx[0]="飞雪"
alert(xx);                      //          xx[1]="飞雪"
//省略写法
string.match(/pattern/flag);整个模板对象省略,让JavaScript自动生成
//var reg = new RegExp(/飞雪/g);
var str = "风雨送春归飞雪迎春到,飞雪连天向天横";
var xx = str.(str.match(/飞雪/g));  //xx的结果: xx[0]="飞雪"
alert(xx);                          //          xx[1]="飞雪"

 

模板的语法(即正规表现)
//字符串相匹配(包括单个字符)【字符串】
reg = new RegExp(/abc/ig);   //匹配字符串"abc",多次,大小写不计
reg = new RegExp(/abc/ig);
xx = "123ABCxyzbcaLMNAbC".match(reg);    //xx为: ABC,AbC   注;bca不符合
//多个字符串中任意一个相匹配【|】
reg = new RegExp(/abc|xyz/ig);   //字符串abc或xyz之间用|分割
    注: 【|】不适用于下面的[...]内容
reg = new RegExp(/abc|xyz/ig);
xx = "123ABCxyzbcaLMNAbC".match(reg);    //xx为: ABC,xyz,AbC
//字符串中任意一个字符相匹配【[...],[.-.]】
reg1 = new RegExp(/[abc]/ig);  //匹配任意一个字符用[...]
reg2 = new RegExp(/[m-p]/ig);  //连续字符串可用减号[.-.]
reg3 = new RegExp(/[0-9]/g);   //判断是否包含数字
reg4 = new RegExp(/[a-z]/ig);  //判断是否包含英文字母
    //注: 【-】只是用于[...]中
reg1 = new RegExp(/[abc]/ig);
xx = "123ABCopqbcaLMNAbC".match(reg1);  //xx为: A,B,C,b,c,a,A,b,C

reg2 = new RegExp(/[m-p]/ig);
yy = "123ABCopqbcaLMNAbC".match(reg2);  //yy为: o,p,M,N
//字符串中任意一个字符不包含匹配【[^...]】
reg1 = new RegExp(/[^abc]/ig);  //匹配任意一个字符都不被包含用^
reg2 = new RegExp(/[^m-p]/ig);  //不包含mnop的任一字符
reg3 = new RegExp(/[^0-9]/g);   //判断是否不包含数字
reg4 = new RegExp(/[^a-z]/ig);  //判断是否不包含英文字母
    注: 【^】是在[...]的里面,不是后面所说的【^】在[...]外面
reg1 = new RegExp(/[^abc]/ig);
xx = "123ABCopqbcaLMN".match(reg1);  //xx为: 1,2,3,o,p,q,L,M,N

reg3 = new RegExp(/[^0-9]/g);
yy = "123opqLMN".match(reg3);        //yy为: o,p,q,L,M,N
//多个重复字符相匹配【{m,n}】
说明: {m,n}表示从m到n次重复字符相匹配,m,n为大于等于0的整数。{m}和{m,}都是正确的,{ ,n}语法不错,但永远不能匹配
reg1 = new RegExp(/abc{2}/ig);    //等价于“/abcc/ig”
reg2 = new RegExp(/abc{1,2}/ig); //等价于“/abc|abcc/ig”
reg3 = new RegExp(/abc{0,2}/ig); //等价于“/ab|abc|abcc/ig”
reg4 = new RegExp(/abc{0,}/ig);   //匹配ab后面跟任意个c
reg5 = new RegExp(/abc{1,}/ig);   //匹配ab后面跟一个以上的c
    注: 【{m,n}】不适用于[...]中
reg1 = new RegExp(/abc{2}/ig);
xx = "abcABCCabccc".match(reg1);              //xx为: ABCC,abcc

reg3 = new RegExp(/abc{0,2}/ig);
yy = "abxABCCabccc".match(reg3);              //yy为: ab,ABC,abcc

zz = "abA Ba  bA    b".match(/a {0,}b/ig);    //匹配ab之间任意空格。zz为: ab,A B,a  b,A    b
ww = "aa1bb22cc321dd9876".match(/[0-9]{2}/g); //匹配2位数字。ww为:22,32,98,76
//子表达式即字符串的一部分相匹配【(...)】
说明: 对字符串的一部分进行操作,可以用()括起来
reg1 = new RegExp(/abc{2}/ig);      //等价于“/abcc/ig”,c被重复了2遍
reg2 = new RegExp(/abc{2}/ig);  //等价于“/abcbc/ig”,bc被重复了2遍
reg1 = new RegExp(/abc{2}/ig);
xx = "abcABCbccc".match(reg1);     //xx为: null

reg2 = new RegExp(/abc{2}/ig);
yy = "abcABCbccc".match(reg2);     //yy为: ABCbc

 

通配符
//匹配单个任意字符(不包括\n)【.】
xx = "at act ant amount".match(/a.t/gi);      //a与t之间有1个字符。xx=act,ant
xx = "at act ant amount".match(/a....t/gi);   //a与t之间有4个字符。xx=amount
//任意匹配字符或字符串【*】等价于{0,}
    “*”星号前面至少必须有一个字符,任意匹配时可以用“.”代替字符
    “*”星号前面不能用限定符{...}及其简写形式
xx = "at act ant amount".match(/a*t/gi);      //t前面任意个a。xx=at,t,t,t
xx = "at act ant amount".match(/a.*t/gi);     //a与t之间任意个字符。xx=at,act,ant,amount
xx = "at act ant amount".match(/*t/gi);       //语法出错(*前面无字符)
xx = "at act ant amount".match(/a{1}*/gi);    //语法出错(*前面不能有限定符)(ie上虽不出错,按字符个数匹配)
xx = "at act ant amount".match(/.*ou/gi);     //ou前面任意个字符。xx=at act ant amou
xx = "at act ant amount".match(/.*/gi);       //与原字符串相同。xx=at act ant amount
//子表达式的任意匹配【?】等价于{0,1}
    “?”问号前面至少必须有一个字符,任意匹配时可以用“.”代替字符
    “?”问号前面没有用(...)将子表达式括起来,“?”相当于“*”,而不是“.”
    “?”问号的主要作用是对(...){.,.}操作
xx = "at act,ant amount".match(/a?t/gi);      //t前面有0个或1个a。xx=at,t,t,t
xx = "at act,ant amount".match(/?t/gi);       //语法出错(*前面无字符)
xx = "at act,ant amount".match(/a{1}?/gi);    //对“a{1}”的结果匹配。xx=a,a,a,a
//子表达式的1次以上匹配【+】等价于{1,}
    “+”加号前面至少必须有一个字符,也可以用“.”代替字符
    “+”加号前面没有用(...)将子表达式括起来,“+”相当于“?”或“*”,而不是“.”
xx = "at act,ant amount".match(/a+t/gi);      //t前面有1个以上的a。xx=at
xx = "at act,ant amount".match(/+t/gi);       //语法出错(*前面无字符)
xx = "at act,ant amount".match(/a{1}+/gi);    //对“a{1}”的结果匹配。xx=a,a,a,a
//通酡符小结
    “.”匹配的字符是任意的,与符号前面的字符没有关系
    “?”匹配的字符或字符串与其前面字符或子表达式有关
    “.”匹配一个字符,而与“*”、“+”和“?”结合后,能匹配0个或多个
    “?”前面没有(...)子表达式时,匹配的是前一个字符
    “?”前面有(...)子表达式时,匹配的是前一个子表达式
    “?”前面有{m,n}限定符时,匹配的个数就是{m,n}指定的个数
xx = "at act,ant amount".match(/a.t/gi);          //xx=act,ant
xx = "at act,ant amount".match(/a?t/gi);          //xx=at,,a,,t,,a,,t,,a,,,,,t,
xx = "at act,ant amount".match(/a*t/gi);          //xx=at,t,t,t
xx = "atat fatt,gatAT amount".match(/at?/gi);     //x=at,at,at,at,AT,a
xx = "atat fatt,gatAT amount".match(/(at)?/gi);   //xx=at,at,,,at,,,,at,AT,,,,,,,,
xx = "atat fatt,gatAT amount".match(/(at){2}?/gi);//xx=atat,atAT

 

定位符
开始【^】和结束【$】位置
如果有\n\r时,要与multiLine配合使用
xx = "I am a student".match(/^s/i);       //xx=null
xx = "I am a student".match(/^i/i);       //xx=I
xx = "I am a \nstudent".match(/^s/i);     //xx=null
xx = "I am a \nstudent".match(/^s/mi);    //xx=s
xx = "I am a student".match(/m$/i);       //xx=null
xx = "I am a student".match(/m$/i);       //xx=m
xx = "I am a\n student".match(/a$/i);     //xx=null
xx = "I am a\n student".match(/a$/mi);    //xx=a
xx = "I am a student".match(/^s/i);       //xx=null
xx = "I am a student".match(/^i/i);       //xx=I
xx = "I am a \nstudent".match(/^s/i);     //xx=null
xx = "I am a student".match(/^i.*t$/i);   //xx=I am a student

 

转义字符
\b 匹配一个【单词边界】(例:回车、换行、空格、逗号)。
\B \b除外
xx = "I am a student".match(/stu\b/i);    //xx=null
xx = "I am a student".match(/\bstu/i);    //xx=stu
xx = "I am a student".match(/ent\b/i);    //xx=ent
xx = "I am a student".match(/ent\B/i);    //xx=null
xx = "我是学生".match(/学生\B/i);         //xx=null
xx = "我是(student)学生".match(/ent\B/i); //xx=ent
xx = "我是student学生".match(/ent\B/i);   //xx=ent
\cA 匹配一个【Ctrl+A】字符。
\d  匹配一个【数字】。等价于[0-9]。
\D  \D除外
\f  匹配一个【换页符】字符。等价于 \x0c 和 \cL。
\n  匹配一个【换行符】。等价于 \x0a 和 \cJ。
\r  匹配一个【回车符】。等价于 \x0a 和 \cJ。
\s  匹配一个【空白符】。包括空格、制表符、换页符等。等价于[\f\n\r\t\v]。
\S  \D除外
\t  匹配一个【制表符】。等价于 \x09 和 \cI。
\v  匹配一个【垂直制表符】。等价于\x0b 和 \cK。
\w  匹配一个【英文数字】。等价于[A-Za-z0-9]。
\W  \w除外
\onnn 匹配一个【8进制数字】
\xnnn 匹配一个【16进制数字】
(略)
\其它字符(正则表达式使用的符号和单双引号)
  \(】【\)】【\[】【\]】【\{】【\}】
  【\"】【\'】【\^】【\$】【\\】【\/
(略)
原文:http://www.quanxue.cn/JC_WebPage/Js/Js12.html
分享到:
评论

相关推荐

    Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解

    position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大小写进行检索;’c’区分大小写进行检索。默认为’c’) SELECT REGEXP_...

    Java使用正则表达式提取XML节点内容的方法示例

    Java使用正则表达式提取XML节点内容的方法示例 Java使用正则表达式提取XML节点内容的方法示例主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作...

    pb 使用正则表达式源码pbregexp

    例如,开发者可能需要创建一个`RegExp`实例,设置正则表达式模式,然后调用`Execute`方法进行匹配操作。如果匹配成功,可以通过`Match`对象获取相关信息。 描述中提到的“pb中使用正则表达式组件,通过该组件可以在...

    C语言正则表达式库

    C语言正则表达式库是用于在C编程环境中处理和匹配正则表达式的软件库。这个库名为PCRE(Perl Compatible Regular Expressions),正如其名,它与Perl语言中的正则表达式语法高度兼容,提供了丰富的功能和强大的匹配...

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...

    正则表达式在数据库查询中的应用

    这里,`REGEXP`是正则表达式的SQL谓词,`'^[ABCD].*P$'`是一个正则表达式,其中: - `^` 表示字符串的起始位置; - `[ABCD]` 匹配“A”、“B”、“C”或“D”中的任意一个字符; - `.*` 表示任意数量的任意字符; - ...

    Lucene 使用正则表达式

    ### Lucene 使用正则表达式 #### 知识点概览 1. **Lucene简介** 2. **正则表达式(regex)在Lucene中的应用** 3. **regexQuery详解** 4. **示例代码解析** 5. **索引创建与查询流程** 6. **正则表达式的语法** #### ...

    正则表达式(regex)C语言源码,超强查找/替换算法

    正则表达式(Regular Expression,简称regex)是编程领域中一种强大的文本处理工具,它用于在字符串中查找、替换或匹配特定模式。在C语言中,实现正则表达式功能通常需要借助第三方库,比如本案例中提到的Henry ...

    Oracle数据库正则表达式

    2. REGEXP_INSTR:在字符串中查找正则表达式,并且返回匹配的位置 3. REGEXP_SUBSTR:返回与正则表达式匹配的子字符串 4. REGEXP_REPLACE:搜索并且替换匹配的正则表达式 使用正则表达式可以编写简洁、强大的 SQL ...

    正则表达式转NFA实现

    正则表达式通常简称为“regex”或“regexp”,可以表示一系列简单的到复杂的字符模式。 正则表达式的转换通常涉及到将其转化为一种计算模型,以便更方便地进行匹配操作。其中,非确定性有限自动机(NFA,Non-...

    正则表达式入门与提高---整理版_VBa_正则式_

    在VBA中,我们通常使用`RegExp`对象来操作正则表达式。首先,创建一个`RegExp`对象,然后设置其`Pattern`属性为我们要匹配的正则表达式模式。例如: ```vba Dim regEx As Object Set regEx = CreateObject(...

    regexp正则表达式正则表达式正则表达式

    ### 正则表达式(Regexp)基础知识及高级应用 #### 一、正则表达式的概念与作用 正则表达式(Regular Expression),通常简称为“regex”或“regexp”,是一种用于模式匹配的强大工具,广泛应用于文本处理领域,如...

    源码(精通正则表达式&实战正则表达式)

    在JavaScript环境中,正则表达式与其他语言有所不同,它既支持字面量表示法(如`/pattern/flags`),也支持构造函数表示法(如`new RegExp('pattern', 'flags')`)。此外,JavaScript提供了`test()`、`match()`、`...

    Oracle正则表达式详解(用法+实例)

    Oracle 10g 引入了一系列新的函数来支持正则表达式的使用,包括 `REGEXP_LIKE`、`REGEXP_INSTR`、`REGEXP_SUBSTR` 和 `REGEXP_REPLACE`。这些函数的使用方式类似于传统的 SQL 函数 `LIKE`、`INSTR`、`SUBSTR` 和 `...

    csharp正则表达式参考手册

    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。...正则表达式通常缩写成"regex",单数有regexp、regex,复数有regexps、regexes、regexen。

    正则表达式教程合集(各种语言的,超全)

    使用`RegExp`对象来处理正则表达式,其中包含`Pattern`属性来设置模式,`Execute`方法来执行匹配,以及`Global`和`IgnoreCase`属性来控制匹配行为。 .NET框架提供了`System.Text.RegularExpressions`命名空间,包含...

    正则表达式.rar || 正则表达式.rar

    2. JavaScript:JavaScript的全局对象`RegExp`提供了正则表达式功能,`test()`、`exec()`、`match()`、`replace()`等方法广泛应用于前端开发。 3. Java:Java中的`java.util.regex`包提供正则表达式支持,`Pattern`...

    正则表达式(日期校验)

    ### 正则表达式在日期校验中的应用 #### 一、引言 在软件开发过程中,日期格式的校验是非常常见的需求之一。利用正则表达式进行日期格式的校验,不仅可以提高代码的可读性和简洁性,还能有效地确保输入数据的准确...

Global site tag (gtag.js) - Google Analytics