`
nicegege
  • 浏览: 590863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JS正则总结

 
阅读更多

1.什么是正则表达式?

正则表达式是匹配字符串的规则。验证用户输入的字符串是否符合正则的规则。

 

2.怎么创建正则表达式?

(1).var reg=/pattern/;

(2).var reg=new RegExp('pattern');

new RegExp(pattern, attributes); 

参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、
区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。
如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

 

3.怎么样执行正则表达式?

reg.exec(str)返回匹配成功的字符串内容。

reg.test(str)返回匹配成功则true,不匹配则false.

 

4.正则表达式规则

c{n}
{1}表示一个的意思。

/c{1}/只能匹配一个c。

/c{2}/则会匹配两个连续的c。

以此类推,

/c{n}/则会匹配n个连续的c。


c{m,n}
c{3,4}的意思是,连续的3个c或者4个c。

c{n,}
c{1,}表示1个以上的c。例如:


*,+,?
*表示0次或者多次,等同于{0,},即

c* 和 c{0,} 是一个意思。


+表示一次或者多次,等同于{1,},即

c+ 和 c{1,} 是一个意思。


最后,?表示0次或者1次,等同于{0,1},即

c? 和 c{0,1} 是一个意思。


贪心与非贪心
人都是贪婪的,正则也是如此。我们在例子reg = /c{3,4}/;str='ccccTest';的例子中已经看到了,能匹配四个的时候,正则绝对不会去匹配三个。上面所介绍的所有的正则都是这样,只要在合法的情况下,它们会尽量多去匹配字符,这就叫做贪心模式。

如果我们希望正则尽量少地匹配字符,那么就可以在表示数字的符号后面加上一个?。组成如下的形式:

{n,}?, *?, +?, ??, {m,n}?


/^开头,结尾$/
^表示只匹配字符串的开头。看下面的例子:


reg = /^c/;
str='维生素c';
execReg(reg,str);结果为null,因为字符串‘维生素c’的开头并不是c,所以匹配失败。


reg = /^c/;
str='cainiao';
execReg(reg,str);这次则返回c,匹配成功,因为cainiao恰恰是以c开头的。


点’.’
‘.’会匹配字符串中除了换行符\n之外的所有字符,例如

reg = /./;
str='cainiao';
execReg(reg,str);结果显示,正则匹配到了字符c。


二选一,正则表达式中的或,“|“
b|c表示,匹配b或者c。

例如:

reg = /b|c/;
str='blueidea';
execReg(reg,str);结果是b。


括号
reg = /^(b|c).+/;
str='bbs.blueidea.com';
execReg(reg,str);这次的结果是整个串bbs.blueidea.com,机上上面的括号这后,这个正则的意思是,如果字符串的开头是b或者c,那么匹配开头的b或者c以及其后的所有的非换行字符。

如果你也实验了的话,会发现返回的结果后面多出来一个“,b“,这是()内的b|c所匹配的内容。我们在正则表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用。我们暂且不去理会这个特性。

字符集合[abc]
[abc]表示a或者b或者c中的任意一个字符。

我们在字字符集合中使用如下的表示方式:[a-z],[A-Z],[0-9],分别表示小写字母,大写字母,数字。例如:


reg =  /^[a-zA-Z][a-zA-Z0-9_]+/;
str='test';
execReg(reg,str);结果是整个test,正则的意思是开头必须是英文字母,后面可以是英文字母或者数字以及下划线。


反字符集合[^abc]
^在正则表达式开始部分的时候表示开头的意思,例如/^c/表示开头是c;但是在字符集和中,它表示的是类似“非“的意思,例如[^abc]就表示不能是a,b或者c中的任何一个。例如:

reg = /[^abc]/;
str='blueidea';
execReg(reg,str);返回的结果是l,因为它是第一个非abc的字符(即第一个b没有匹配)。同样:

 

边界与非边界
\b表示的边界的意思,也就是说,只有字符串的开头和结尾才算数。例如/\bc/就表示字符串开始的c或者是结尾的c。看下面的例子:


reg = /\bc/;
str='cainiao';
execReg(reg,str);返回结果c。匹配到了左边界的c字符。
与\b对应\B表示非边界。例如:


reg = /\Bc/;
str='bcb';
execReg(reg,str);这次会成功地匹配到bcb中的c,。然而


reg = /\Bc/;
str='cainiao';
execReg(reg,str);则会返回null。因为\B告诉正则,只匹配非边界的c。


数字与非数字
\d表示数字的意思,相反,\D表示非数字。例如:

空白
\f匹配换页符,\n匹配换行符,\r匹配回车,\t匹配制表符,\v匹配垂直制表符。

\s匹配单个空格,等同于[\f\n\r\t\v]。例如:


reg = /\s.+/;
str='This is a test  String.';
execReg(reg,str);返回“is a test String.”,正则的意思是匹配第一个空格以及其后的所有非换行字符。
同样,\S表示非空格字符。

单词字符
\w表示单词字符,等同于字符集合[a-zA-Z0-9_]。例如:

reg = /\w+/;
str='blueidea';
execReg(reg,str);返回完整的blueidea字符串,因为所有字符都是单词字符。
\W表示非单词字符,等效于[^a-zA-Z0-9_]

反向引用  **********有点难度*****不过还是理解了*******************
形式如下:/(子正则表达式)\1/

依旧用例子来说明:

1.

reg = /\w/;
str='blueidea';
execReg(reg,str);返回b。

2.

reg = /(\w)(\w)/;
str='blueidea';
execReg(reg,str);返回bl,b,l

bl是整个正则匹配的内容,b是第一个括号里的子正则表达式匹配的内容,l是第二个括号匹配的内容。


3.

reg = /(\w)\1/;  ********\1表示匹配第一个括号里正则表达式匹配的内容***************
str='blueidea';
execReg(reg,str);则会返回null。这里的“\1”就叫做反向引用,它表示的是第一个括号内的字正则表达式匹配的内容。在上面的例子中,第一个括号里的(\w)匹配了b,因此“\1”就同样表示b了,在余下的字符串里自然找不到b了。

与第二个例子对比就可以发现,“\1”是等同于“第1个括号匹配的内容”,而不是“第一个括号的内容”。


reg = /(\w)\1/;
str='bbs.blueidea.com';
execReg(reg,str);这个正则则会匹配到bb。


括号(2)
前面我们曾经讨论过一次括号的问题,见下面这个例子:

reg = /^(b|c).+/;
str='bbs.blueidea.com';
execReg(reg,str);这个正则是为了实现只匹配以b或者c开头的字符串,一直匹配到换行字符,但是。上面我们已经看到了,可以使用“\1”来反向引用这个括号里的子正则表达式所匹配的内容。而且exec方法也会将这个字正则表达式的匹配结果保存到返回的结果中。

不记录子正则表达式的匹配结果
使用形如(?:pattern)的正则就可以避免保存括号内的匹配结果。例如:
reg = /^(?:b|c).+/;
str='bbs.blueidea.com';
execReg(reg,str);可以看到返回的结果不再包括那个括号内的字正则表达式多匹配的内容。

同理,反向引用也不好使了:

reg = /^(b|c)\1/;
str='bbs.blueidea.com';
execReg(reg,str);返回bb,b。bb是整个正则表达式匹配的内容,而b是第一个子正则表达式匹配的内容。

reg = /^(?:b|c)\1/;
str='bbs.blueidea.com';
execReg(reg,str);返回null。由于根本就没有记录括号内匹配的内容,自然没有办法反向引用了。


正向预查
形式:(?=pattern)

所谓正向预查,意思就是:要匹配的字符串,后面必须紧跟着pattern!

我们知道正则表达式/cainiao/会匹配cainiao。同样,也会匹配cainiao9中的cainiao。但是我们可能希望,cainiao只能匹配cainiao8中的菜鸟。这时候就可以像下面这样写:/cainiao(?=8)/,看两个实例:

reg = /cainiao(?=8)/;
str='cainiao9';
execReg(reg,str);返回null。


reg = /cainiao(?=8)/;
str='cainiao8';
execReg(reg,str);匹配cainiao。

需要注意的是,括号里的内容并不参与真正的匹配,只是检查一下后面的字符是否符合要求而已,例如上面的正则,返回的是cainiao,而不是cainiao8。

?!
形式(?!pattern)和?=恰好相反,要求字符串的后面不能紧跟着某个pattern,还拿上面的例子:

reg = /blue(?!idea)/;
str='blueidea';
execReg(reg,str);返回null,因为正则要求,blue的后面不能是idea。


reg = /blue(?!idea)/;
str='bluetooth';
execReg(reg,str);则成功返回blue。


匹配元字符
首先要搞清楚什么是元字符呢?我们之前用过*,+,?之类的符号,它们在正则表达式中都有一定的特殊含义,类似这些有特殊功能的字符都叫做元字符。例如

reg = /c*/;表示有任意个c,但是如果我们真的想匹配’c*’这个字符串的时候怎么办呢?只要将*转义了就可以了,如下:

reg = /c\*/;
str='c*';
execReg(reg,str);返回匹配的字符串:c*。


同理,要匹配其他元字符,只要在前面加上一个“\”就可以了。

正则表达式的修饰符
全局匹配,修饰符g
形式:/pattern/g

例子:reg = /b/g;

后面再说这个g的作用。先看后面的两个修饰符。

不区分大小写,修饰符i
形式:/pattern/i

例子:

var reg = /b/;
var str = 'BBS';
execReg(reg,str);返回null,因为大小写不符合。


var reg = /b/i;
var str = 'BBS';
execReg(reg,str);匹配到B,这个就是i修饰符的作用了。

行首行尾,修饰符m
形式:/pattern/m

m修饰符的作用是修改^和$在正则表达式中的作用,让它们分别表示行首和行尾。例如:

var reg = /^b/;
var str = 'test\nbbs';
execReg(reg,str);匹配失败,因为字符串的开头没有b字符。但是加上m修饰符之后:

var reg = /^b/m;
var str = 'test\nbbs';
execReg(reg,str);匹配到b,因为加了m修饰符之后,^已经表示行首,由于bbs在字符串第二行的行首,所以可以成功地匹配。

 

转自http://www.cainiao8.com/web/js_note/js_regular_expression.html

分享到:
评论

相关推荐

    HTML js正则表达式总结

    在JavaScript(简称JS)中,正则表达式是一种强大的文本处理工具,它由一系列字符和特殊符号组成,用于匹配字符串中的模式。正则表达式不仅可以用于字符串搜索、替换等操作,还能帮助开发者实现复杂的文本处理任务。...

    javascript正则表达式综合练习

    总结来说,JavaScript正则表达式是一个强大的文本处理工具,通过理解和熟练运用上述知识点,开发者可以有效地处理字符串操作,进行数据验证,以及在各种场景下实现复杂的数据匹配。`validator.js`文件可以作为实践...

    JavaScript正则表达式匹配 div style标签

    总结一下,虽然正则表达式是强大的文本处理工具,但在处理复杂的HTML文档时,它们可能不是最佳选择。尽管如此,在某些特定的简单场景下,通过构建合适的正则表达式,我们依然可以完成对`<div>`和`<style>`标签的有效...

    js正则表达式限制文本框只能输入数字,能输小数点.

    ### 正则表达式在JavaScript中的应用:限制文本框只能输入数字及小数点 在Web开发中,经常需要对用户输入的数据进行合法性验证。为了确保数据格式正确且符合预期,开发者通常会在前端使用JavaScript结合HTML来实现...

    JS正则表达式大全.docx

    总结来说,JavaScript中的正则表达式是通过RegExp对象表示的,它们提供了丰富的模式匹配能力,可以用于复杂的文本处理任务。掌握正则表达式的使用,可以极大地提升JavaScript编程中的文本操作效率。

    js正则表达式使用

    4. **转义字符**:在JavaScript正则表达式中,`\`用于转义特殊字符,例如`\.`将匹配点字符".",而不是元字符`.`。 - **示例**:匹配包含"."的字符串。 ```javascript var str = "example.example.com"; var ...

    javaScript正则表达式帮助文档

    JavaScript正则表达式是编程语言JavaScript中的一个重要...总结,JavaScript正则表达式是开发者的重要工具,熟练掌握其语法和用法能提高代码质量和效率。不断练习和探索,你会发现它在处理字符串时的灵活性和强大性。

    JS正则表达式大全

    ### JS正则表达式大全知识点解析 #### 一、正则表达式基础概念 正则表达式(Regular Expression)是一种用于匹配字符串中字符组合的强大工具。JavaScript 的 `RegExp` 对象以及 `String` 对象提供了丰富的接口来...

    JS 正则查找匹配

    总结来说,JS的正则表达式是强大的文本处理工具,通过不同的构造方式、修饰符、字符类、量词、分组和前瞻断言,可以实现各种复杂的字符串匹配和查找操作。在实践中,我们需要根据具体需求灵活运用这些特性,同时注意...

    js正则 表达式 验证

    ### JavaScript正则表达式验证知识点总结 #### 一、引言 在JavaScript中,正则表达式被广泛用于数据验证、字符串搜索与替换等场景。本文将基于给定的代码片段,详细介绍几种常用的正则表达式及其应用场景。 #### ...

    JS正则表达式大全.pdf

    ### JavaScript正则表达式详解 #### 一、概述 JavaScript 中的正则表达式是一种用于匹配、搜索和替换字符串的强大工具。它可以帮助开发者快速高效地处理文本数据。本篇文章将基于“JS正则表达式大全”文档提供的...

    javascript正则表达式总结.docx

    以下是对JavaScript正则表达式的一些关键知识点的详细总结: 1. **字符类**: - `[0-9]` 匹配任何阿拉伯数字(等同于`\d`) - `\D` 匹配任何非阿拉伯数字 - `.` 匹配任意字符(除了换行符) 2. **量词**: - `...

    js正则表达式使用.txt

    #### 一、JavaScript正则表达式的创建与使用 在JavaScript中,正则表达式是一种强大的文本处理工具,它能够帮助开发者进行字符串的匹配、搜索、替换等操作。根据给定的部分内容,我们可以总结出以下关于正则表达式...

    JS正则表达式完整版.txt

    从给定的文件信息来看,主要讨论了JavaScript(简称JS)中的字符串操作与正则表达式的应用。下面将深入解析这些关键知识点。 ### 字符串对象(String Object) 在JavaScript中,`String`对象用于处理字符串数据。它...

Global site tag (gtag.js) - Google Analytics